Jak nakładać warstwy mapy (shp i csv) w R?

9

To jest crossspost z stackoverflow . Bardzo mało wiem o oprogramowaniu GIS i robię wszystkie moje mapowania z góry R. Przeprosiny, jeśli jest to zbyt podstawowe pytanie. Załóżmy, że mam dwa pliki kształtów z różnych źródeł, ale o różnych atrybutach. Powiedzmy, że jedna dotyczy granic administracyjnych w Teksasie ( boundaries.shp), a druga dotyczy rzek w Teksasie ( rivers.shp). Mam również trzeci plik towns.csvpokazujący lokalizacje miast w państwie. Po wczytaniu plików mogę nadpisać lokalizacje miast na granicach administracyjnych w maptoolspakiecie:

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

Ale jak mogę nałożyć wszystkie trzy? Z pewnością jest na to łatwy sposób?

user3671
źródło

Odpowiedzi:

8

PBSMapping powinien pasować do twoich potrzeb. W NCEAS jest tutorial . Poniższy kod jest dostosowany z tego samouczka. Przyjęłam założenia dotyczące twoich danych. Edytuj odpowiednio do swojej sytuacji.

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
źródło
Dzięki, RK, wciąż próbuję się z tym pogodzić, ale to był doskonały wskaźnik.
user3671
Nie ma za co. Miłej zabawy mapowania :)
RK
11

Najprostszym sposobem na nałożenie dwóch wykresów może być użycie add = TRUEopcji w plot. Oto przykład ze sztucznymi danymi

# 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')
żółta czapka
źródło
Dzięki za włożenie, żółta czapka. Ale mówi: „add nie jest parametrem graficznym”.
user3671
Przykład działa dobrze, gdy uruchamiam go na komputerze, ale wydaje się, że „dodawanie” nie zawsze działa i zależy od klasy danych wejściowych, zobacz ten post . Więc moja sugestia może nie być najlepszym sposobem ...
yellowcap