Используя ggmap, я хочу включить границы муниципалитета (полигон) из шейп-файла на карту, содержащую некоторые точки расположения. Этот скрипт делает все, кроме построения полигона:
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)
Как я могу построить полигон из шейп-файла? Я попытался заменить вторую последнюю строку следующим:
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()
Но тогда я получаю следующую ошибку:
Error: Aesthetics must be either length 1 or the same as the data (1): x, y
Чтобы добавить ответ выше: Для тех, кто следит за их превосходным учебником / ответом и интересуется, как решить следующую проблему об отсечении полигонов (как я был!)
Вот ответ, любезно предоставленный пользователем streamlinedmethod по адресу /programming/13982773/crop-for-spatialpolygonsdataframe
тогда, когда вы строите сюжет, у вас не будет странной проблемы с отсечкой.
источник