Come sovrapporre i livelli della mappa (shp e csv) in R?


9

Questo è un crosspost da StackOverflow . So molto poco del software GIS e sto facendo tutta la mia mappatura in R. Mi scuso in anticipo se questa è una domanda troppo semplice. Diciamo che ho due shapefile da fonti diverse ma con attributi diversi. Supponiamo che uno sia per i confini amministrativi del Texas ( boundaries.shp) e l'altro per i fiumi Texas ( rivers.shp). Ho anche un terzo file che towns.csvmostra le posizioni delle città all'interno dello stato. Dopo aver letto i file, posso sovrastampare le posizioni delle città sui confini amministrativi nel maptoolspacchetto:

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

Ma come posso sovrapporre tutti e tre? Sicuramente esiste un modo semplice per farlo?

Risposte:


8

PBSMapping dovrebbe adattarsi alle tue esigenze. C'è un tutorial presso NCEAS . Il codice seguente è adattato da quel tutorial. Sto facendo ipotesi sui tuoi dati tra l'altro. Modifica come appropriato per la tua situazione.

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)

Grazie, RK sto ancora cercando di capire, ma questo è stato un ottimo indicatore.
user3671

Prego. Buon divertimento :)
RK,

11

Il modo più semplice per sovrapporre due grafici potrebbe essere usare l' add = TRUEopzione in plot. Ecco un esempio con dati artificiali

# 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')

Grazie per avermi inserito, tappo giallo. Ma dice "aggiungi non è un parametro grafico".
user3671,

L'esempio funziona bene quando lo eseguo sul mio computer, ma sembra che "aggiungi" non funzioni sempre e dipende dalla classe dei dati di input, vedi questo post . Quindi il mio suggerimento potrebbe non essere il modo migliore per andare ...
yellowcap
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.