Mit ggmap möchte ich Gemeindegrenzen (Polygon) aus einem Shapefile auf einer Karte mit einigen Standortpunkten einfügen. Dieses Skript erledigt alles außer dem Zeichnen des Polygons:
library(rgdal)
library(ggmap)
# Get shapefile with Drammen municipality borders
tmpzip<-tempfile()
tmpdir<-tempfile()
dir.create(tmpdir)
download.file("http://www.kartverket.no/Documents/Kart/N50-N5000%20Kartdata/33_N5000_shape.zip",tmpzip)
unzip(tmpzip, exdir=tmpdir)
kommune <- readOGR(dsn=tmpdir, layer="NO_AdminOmrader_pol")
kommune<-kommune[kommune$NAVN=="Drammen",]
kommune<-spTransform(kommune, CRS("+init=epsg:4326"))
# Get location point data
subscr<-data.frame(lon=c(10.1237,10.2161,10.2993),lat=c(59.7567,59.7527,59.6863), pop=c(58,12,150))
coordinates(subscr)<-~lon+lat
proj4string(subscr)<-CRS("+init=epsg:4326")
lon <- c(10.0937,10.3293)
lat <- c(59.7916,59.6563)
map <- get_map(location = c(lon[1], lat[2], lon[2], lat[1]),
maptype = "roadmap", source = "osm", zoom = 11)
p <- ggmap(map) +
geom_point(data = as.data.frame(subscr), aes(x = lon, y = lat, size=pop),
colour = "darkgreen") +
theme_bw()
print(p)
Wie kann ich das Polygon aus dem Shapefile zeichnen? Ich habe versucht, die vorletzte Zeile durch folgende zu ersetzen:
p <- ggmap(map) +
geom_point(data = as.data.frame(subscr), aes(x = lon, y = lat, size=pop),
colour = "darkgreen") +
geom_polygon(data = as.data.frame(kommune)) +
theme_bw()
Aber dann bekomme ich folgenden Fehler:
Error: Aesthetics must be either length 1 or the same as the data (1): x, y
Um die obige Antwort zu ergänzen: Für diejenigen, die ihrem hervorragenden Tutorial / ihrer Antwort folgen und sich fragen, wie sie das nächste Problem mit dem Ausschneiden von Polygonen lösen können (wie ich es war!)
Hier ist die Antwort mit freundlicher Genehmigung des Benutzers 'streamlinedmethod' unter /programming/13982773/crop-for-spatialpolygonsdataframe
Wenn Sie dann planen, werden Sie nicht das seltsame Clipping-Problem haben.
quelle