Creando polígonos a partir de sus coordenadas en R

Los objetos espaciales de tipo polígono en R, con tabla de atributos, corresponden a la clase SpatialPolygonsDataFrame. Para generarlos desde cero se tiene que disponer primero de las coordenadas individuales de cada polígono cuidando que el primer y último punto coincida.

Estas coordenadas deben estar en un arreglo matricial. Como el método matrix requiere especificar más parámetros que el método base cbind, es preferible usar este último porque prescindimos de especificar número de filas y columnas y modo de despliegue de la matriz.

Una vez conocidas las coordenadas de cada polígono, el arreglo matricial con base en cbind se usa para crear un objeto de tipo Polygon donde se permite además especificar si son “agujeros” (hole = TRUE). Los objetos de tipo Polygon son previos a la construcción de los objetos de tipo Polygons. Estos últimos aceptan una lista de objetos Polygon y la asignación de un identificador id.

Una vez creados los objetos Polygons posteriormente viene la creación de los SpatialPolygons; que corresponde a una lista de Polygons con el orden en el cual se van a desplegar espacialmente.

Finalmente, se crea el Data Frame según nuestros requerimientos y se incluye en el objeto final SpatialPolygonsDataFrame. Los pasos se detallan a continuación para un archivo vectorial tipo polígono con 4 features y con un agujero en el primer feature.

library(sp)

coor_p1 <- cbind(c(348447.8, 348448.7, 348544.0, 348639.3, 348549.6, 348488.9, 348447.8),
c(4479867, 4479933, 4479979, 4479894, 4479821, 4479801, 4479867))

P1 <- Polygon(coor_p1)

coor_p1_h <- cbind(c(348490.7, 348495.4, 348567.9, 348602.8, 348545.7, 348496.8, 348490.7),
c(4479898, 4479835, 4479859, 4479895, 4479946, 4479934, 4479898))

P1_h <- Polygon(coor_p1_h, hole=TRUE)

coor_p2 <- cbind(c(348639.3, 348660.8, 348763.6, 348786.0, 348759.9, 348807.5, 348706.6, 348639.3),
c(4480011, 4480067, 4480058, 4479984, 4479929, 4479851, 4479812, 4480011))

P2 <- Polygon(coor_p2)

coor_p3 <- cbind(c(348484.2, 348517.8, 348624.4, 348710.3, 348658.0, 348547.7, 348479.5, 348484.2),
c(4479707, 4479760, 4479777, 4479718, 4479638, 4479649, 4479590, 4479707))

P3 <- Polygon(coor_p3)

coor_p4 <- cbind(c(348822.5, 348877.6, 348957.0, 348954.2, 348903.8, 348753.3, 348862.7, 348822.5),
c(4480052, 4480080, 4480047, 4479831, 4479553, 4479544, 4479818, 4480052))

P4 <- Polygon(coor_p4)

P1s <- Polygons(list(P1, P1_h), 1)
P2s <- Polygons(list(P2), 2)
P3s <- Polygons(list(P3), 3)
P4s <- Polygons(list(P4), 4)

SPlgs <- SpatialPolygons(list(P1s, P2s, P3s, P4s))

df <- data.frame(ID = 1:4)

SPDF <- SpatialPolygonsDataFrame(SPlgs, df)

plot(SPDF, axes=T, col = 'blue')

Al SpatialPolygonsDataFrame puede asignársele una proyección (en este caso código EPSG 32612) con:

library(raster)
projection(SPDF) <- projection('+init=EPSG:32612')

La visualización de la ejecución de los comandos anteriores puede ser observada en la imagen siguiente:

R8

Esta entrada fue publicada en Lenguaje R. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s