Como sobrepor camadas de mapa (shp e csv) em R?

9

Esta é uma referência cruzada do stackoverflow . Eu sei muito pouco sobre o software GIS e estou fazendo todo o meu mapeamento no R. Desculpas com antecedência, se essa é uma pergunta muito básica. Digamos que eu tenho dois shapefiles de fontes diferentes, mas com atributos diferentes. Digamos, um é para os limites administrativos do Texas ( boundaries.shp) e o outro é para os rios do Texas ( rivers.shp). Eu também tenho um terceiro arquivo towns.csvmostrando os locais das cidades do estado. Depois de ler os arquivos, posso traçar os locais da cidade nos limites adimistrativos do maptoolspacote:

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

Mas como posso sobrepor todos os três? Certamente existe uma maneira fácil de fazer isso?

user3671
fonte

Respostas:

8

O PBSMapping deve atender às suas necessidades. Há um tutorial no NCEAS . O código abaixo é adaptado desse tutorial. Estou fazendo suposições sobre seus dados. Edite conforme apropriado para sua situação.

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)
RK
fonte
Obrigado, RK, ainda estou tentando entender, mas esse foi um excelente indicador.
user3671
De nada. Mapeamento do divertimento têm :)
RK
11

A maneira mais simples para sobrepor duas parcelas pode estar usando a add = TRUEopção plot. Aqui está um exemplo com dados artificiais

# 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')
yellowcap
fonte
Obrigado por entrar, yellowcap. Mas diz "add não é um parâmetro gráfico".
user3671
O exemplo funciona bem quando eu o executo no meu computador, mas parece que "add" nem sempre funciona e depende da classe dos dados de entrada, consulte esta publicação . Assim, a minha sugestão pode não ser a melhor maneira de ir ...
yellowcap