¿Cómo superponer capas de mapa (shp y csv) en R?


9

Este es un poste cruzado de stackoverflow . Sé muy poco sobre el software SIG y estoy haciendo todo mi mapeo en R. Disculpas por adelantado si esta es una pregunta demasiado básica. Digamos que tengo dos shapefiles de diferentes fuentes pero con diferentes atributos. Digamos, uno es para límites administrativos de Texas ( boundaries.shp) y el otro es para ríos de Texas ( rivers.shp). También tengo un tercer archivo que towns.csvmuestra las ubicaciones de las ciudades dentro del estado. Después de leer en los archivos, puedo sobreplotar las ubicaciones de las ciudades en los límites administrativos del maptoolspaquete:

plot(boundaries); points(towns$lon, towns$lat)

Pero, ¿cómo puedo superponer los tres? ¿Seguramente hay una manera fácil de hacer esto?

Respuestas:


8

PBSMapping debe adaptarse a sus necesidades. Hay un tutorial en NCEAS . El siguiente código está adaptado de ese tutorial. Estoy haciendo suposiciones sobre sus datos por cierto. Edite según corresponda para su situación.

library(PBSmapping)

#prepare towns
pts <- read.csv("towns.csv")
towns <- points(towns$lon, towns$lat)
# read in shapefiles 
rivers <- importShapefile("rivers.shp")
boundaries <- importShapefile("boundaries.shp")


# note that importShapefile reads the .prj file if it exists, but it
# does not adopt the proj4 format used by the above approaches
proj.abbr <- attr(boundaries, "projection") # abbreviated projection info
proj.full <- attr(boundaries, "prj") # full projection info
print(proj.abbr)
# [1] "LL"

# generate map using PBSmapping plotting functions
plotPolys(boundaries, projection=proj.abbr, border="gray",
    xlab="Longitude", ylab="Latitude")
addPoints(towns, pch=20, cex=0.8)
addLines(rivers, col="blue", lwd=2.0)

Gracias, RK Todavía estoy tratando de entenderlo, pero este fue un excelente puntero.
user3671

De nada. Diviértete mapeando :)
RK

11

La forma más simple de superponer dos gráficos podría ser usar la add = TRUEopción en plot. Aquí hay un ejemplo con datos artificiales.

# Load sp package for creating artificial data
library(sp)

# Create sample town points
towns <- data.frame(lon = sample(100), lat = sample(100))
towns <- SpatialPoints(towns)

# Create sample polygon grid
grd <- GridTopology(c(1,1), c(10,10), c(10,10))
polys <- as.SpatialPolygons.GridTopology(grd)

# Plot polygons
plot(polys)

# Add towns (in red colour)
plot(towns, add = TRUE, col = 'red')

Gracias por contribuir, yellowcap. Pero dice "agregar no es un parámetro gráfico".
user3671

El ejemplo funciona bien cuando lo ejecuto en mi computadora, pero parece que "agregar" no funciona siempre y depende de la clase de los datos de entrada, vea esta publicación . Entonces, mi sugerencia podría no ser la mejor manera de hacerlo ...
yellowcap
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.