1 votos

Eliminar líneas desde el interior de un polígono (shapefile) en R

introducir descripción de la imagen aquíTengo este código que imprime las Islas Galápagos. Pero dentro de las islas, hay líneas que quiero eliminar. ¿Cómo es posible en R?

library(rgdal)
library(ggplot2)

URL <- "https://osm2.cartodb.com/api/v2/sql?filename=public.galapagos_islands&q=select+*+from+public.galapagos_islands&format=geojson&bounds=&api_key="
fil <- "gal.json"
if (!file.exists(fil)) download.file(URL, fil)
gal <- readOGR(fil, "OGRGeoJSON")    
gal_map <- fortify(gal)
ggplot() + 
  geom_map(map=gal_map, data=gal_map, aes(x=long, y=lat, map_id=id)) + 
  coord_equal()

Mira la imagen: No quiero mostrar estas líneas (todas ellas).

2voto

Tilo Wiklund Puntos 741

Supongo que las 'líneas' a las que te refieres son simplemente los límites del polígono que separan una característica de otra. Si solo quieres mostrar los datos y no necesariamente tienes que quedarte con ggplot2, una opción posible sería usar spplot. Simplemente crea un gráfico de los polígonos no unificados con un color de línea "transparente" (ver ?sp.polygons) y luego agrega el límite de la isla usando layer de latticeExtra. Ten en cuenta el uso de unionSpatialPolygons de maptools para fusionar todos los polígonos en uno solo, terminando así con solo la línea costera.

## agregar columna 'id'
gal@data$id <- seq(gal@data$fid) - 1

## unificar polígonos
library(maptools)
gal_union <- unionSpatialPolygons(gal, IDs = rep(1, length(gal)))

## mostrar datos solo con límites de isla
library(latticeExtra)
spplot(gal, "id", col = "transparent", scales = list(draw = TRUE), 
       at = seq(gal@data$id), col.regions = rainbow(nrow(gal@data))) + 
  layer(sp.polygons(gal_union, fill = "transparent"))

spplot

Si te he malinterpretado y estás intentando fusionar polígonos específicos, por ejemplo, basados en su ubicación espacial, te recomiendo que examines en profundidad ?unionSpatialPolygons y, por ejemplo, la publicación relacionada en Unir polígonos en R.


Actualización:

Esta sería una posible (aunque muy básica) versión en ggplot2 del código anterior (con la leyenda desactivada).

gal_ff <- fortify(gal)
gal_union_ff <- fortify(gal_union)

ggplot(aes(x = long, y = lat, group = id, fill = id), data = gal_ff) + 
  geom_polygon() + 
  geom_path(aes(x = long, y = lat, group = group), data = gal_union_ff, 
            colour = "black") +
  scale_fill_discrete(guide = FALSE) + 
  coord_equal()

plot2

2voto

SteveBurkett Puntos 960

Puedes agregar los polígonos y luego desagregar a las 182 islas individuales.

URL <- "https://osm2.cartodb.com/api/v2/sql?filename=public.galapagos_islands&q=select+*+from+public.galapagos_islands&format=geojson&bounds=&api_key="
fil <- "gal.json"
if (!file.exists(fil)) download.file(URL, fil)

library(rgdal)
gal <- readOGR(fil, "OGRGeoJSON")   

library(raster)
library(rgeos)

a <- aggregate(gal)
b <- disaggregate(a)

plot(b, col=sample(rainbow(length(b))))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X