외부 패키지를 사용하지 않고지도를 생성하는 방법이있다는 :
This link
는 우수한 Mapzen 웹 사이트, 폴란드에서 행정 구역의 shape 파일의 집합을 제공합니다 ...
osmar
를 사용하지 마십시오. 다운로드하여 압축을 풀면
warsaw.osm-admin.*
이라는 shapfile 세트가 표시됩니다. 이것은
다각형 폴란드의 모든 지구의 모양 파일로, osm_id (!!)로 쉽게 표시됩니다. 아래 코드는 파일을 다운로드하고 "shapefile과 함께 디렉토리"에 압축을 풀 었다고 가정합니다.
library(ggmap)
library(ggplot2)
library(rgdal)
setwd(" <directory with your shapefiles> ")
pol <- readOGR(dsn=".",layer="warsaw.osm-admin")
spp <- pol[pol$osm_id==-2536107,]
wgs.84 <- "+proj=longlat +datum=WGS84"
spp <- spTransform(spp,CRS(wgs.84))
map <- get_googlemap('warsaw', zoom =10)
spp.df <- fortify(spp)
ggmap(map, extent='device', legend="bottomleft") +
geom_polygon(data = spp.df, aes(x = long, y=lat, group=group),
fill="blue", alpha=0.2) +
geom_path(data=spp.df, aes(x=long, y=lat, group=group),
color="gray50", size=0.3)
두 뉘앙스 : (1) OSM ID는 사용 할 수 있도록, 예를 들어,
spp <- pol[pol$osm_id==-2536107,]
은 (관련 지역을 추출하고, 음수로 저장됩니다 2) shapefile이 WGS84 (long/lat)에 투영되지 않습니다. 그래서 우리는 사용하여 재 투영 할 수 있습니다
이
spp <- spTransform(spp,CRS(wgs.84))
osmar
이 작동하지 않는 이유는 경로가 잘못된 순서로 있다는 것입니다. warszawa.sp
은 SpatialLinesDataframe
으로, 일련의 경로로 구성되어 있습니다 (귀하의 경우 12 개). 각 경로 세그먼트는 일련의 선분으로 구성되어 있습니다. 이 경우 fortify(...)
을 사용하면 ggplot
을 단일 점 시퀀스로 결합합니다. 그러나 경로가 볼록 순서가 아니기 때문에 ggplot은 예를 들어 북동쪽에서 끝나는 경로를 남서쪽에서 시작하는 경로로 연결하려고 시도합니다. 이것이 모든 여분의 라인을 얻는 이유입니다. 당신은 세그먼트를 착색하여이를 볼 수 있습니다
xx=coordinates(warszawa.sp)
colors=rainbow(11)
plot(t(bbox(warszawa.sp)))
lapply(1:11,function(i)lines(xx[[i]][[1]],col=colors[i],lwd=2))
색상은 "무지개"순서 (레드, 오렌지, 노란색, 녹색, 등)에 있습니다. 분명히 선들이 그 순서대로 있지 않습니다.
EDIT @ ako 님의 의견에 대한 답변.
SpatialLines 객체를 "수정"하는 방법이 있지만 사소한 것은 아닙니다. rgeos
패키지의 gPolygonize(...)
함수는 의 목록을 가져오고 fortify(...)
과 함께 ggplot에 사용할 수있는 SpatialPolygons
개체로 변환합니다. 하나의 큰 문제 (나는 솔직히 이해하지 못함)는 OP의 warszaw.sp
객체에 12 개의 행이 있고 그 중 두 개가 중복 된 것으로 보이는 것입니다. 이로 인해 gPolygonize(...)
이 실패합니다. 따라서 처음 11 개 경로 만있는 SpatialLines 목록을 만들면 warszawa.sp
을 다각형으로 변환 할 수 있습니다. 그러나 다른 개체가 osm
으로 변환 된 방법이나 예상되는 방식을 예측할 수 없기 때문에 일반적인 것은 아닙니다. 위와 같은지도로 연결되는 코드가 있습니다.
library(rgeos)
coords <- coordinates(warszawa.sp)
sll <- lapply(coords[1:11],function(x) SpatialLines(list(Lines(list(Line(x[[1]])),ID=1))))
spp <- gPolygonize(sll)
spp.df <- fortify(spp)
ggmap(map, extent='device', legend="bottomleft") +
geom_polygon(data = spp.df, aes(x = long, y=lat, group=group),
fill="blue", alpha=0.2) +
geom_path(data=spp.df, aes(x=long, y=lat, group=group),
color="gray50", size=0.3)
+1 오류를 너무 자세히 설명합니다. 대체 파일을 사용할 수없는 경우 토폴로지를 사용하여 인접성별로 순서를 바꾸는 사소한 방법이 있습니까? 교체보다는 수리? – ako
맨, 황금! 나는 실제로 그것이 잘못된 순서로 그려진 선으로 이루어져 있다는 것을 깨닫지 만, 어쨌든 거기에 해결책이 간단하다는 것과 Warsaw의 모양의 파일이 있다는 것을 결코 알지 못했다. (그렇게 특별한 데이터 세트에 대해 너무 좋을 것이라고 생각했다. - 지금해야 할 일은 warsaw.osm-admin.shp를 가져 오는 것뿐입니다. 너 정말 고마워! –
@ako 네, 그렇지만 사소한 것은 아닙니다. 끝에 내 편집 내용을 확인하십시오. – jlhoward