우리가 살아가는 도시

[R programming] R에서 Spatial 본문

내가 알아가는 도시/R programming

[R programming] R에서 Spatial

세화주 2017. 1. 26. 18:00

library(GISTools)

 

# GISTools 패키지의 데이터 탐색
data(newhaven)

 

ls() #ls() : 현재 워크스페이스에서 사용하는 변수 객체들의 리스트를 검색한다.
     #변수들을 검색하여 찾을 경우 pattern인수에 값을 regular expression으로 넣어주면 찾을 수 있다.
     #object()함수를 사용해서 ls()와 같은 결과를 도출할 수 있다.
     #변수들이 상세한 구조를 확인하기 위해서는 ls.str()함수를 이용하여 세부적인 내용을 확인할 수 있다.
ls.str()

 

head(data.frame(blocks)) #data.frame : 자료 객체들을 결합하여 데이터 프레임을 생성
                         #head() 데이터세트중의 일부 데이터를 호출한다. 첫 5줄만 출력하기 위해 head명령어를 사용
                         #data(mtcars)
                         #mode(mtcars)
                         #head(mtcars)
                         #head(data.frame(mtcars$mpg))
                         #x<-data.frame(mtcars)
                         #x
colnames(data.frame(blocks))

 

class(blocks)

 

write.csv(blocks,"blocks.csv") #데이터 내보내기

 

# Connecticut의 New Haven의 센서스 블럭에 도로  겹쳐 그리기
par(mar = c(0,0,0,0))
plot(blocks)
plot(roads, add=TRUE, col="red")

 

# Connecticut의 New Haven의 센서스 블럭에 범죄 발생 현장 표시
plot(blocks, lwd = 0.5, border = "grey50")
plot(breach, col = "red", pch = 1, add = TRUE)

 

#지도에 스케일 표시
map.scale(534750,152000,miles2ft(2),"Miles",4,0.5)

 

# 화살표 표시
north.arrow(534750,154000,miles2ft(0.25),col= "lightblue")
title('New Haven, CT.' )

 

getwd() #현재 설정된 워킹 디렉토리 확인하기
setwd() #새로운 워킹 디렉토리 지정하기

#2. 공간 객체 매핑
rm(list=ls())

library(GISTools)
data(georgia)
write.csv(georgia,"georgia.csv")

 

# Georgia
par(mar=c(5,4,4,2))
georgia.outline <- gUnaryUnion(georgia, id = NULL) # 주 경계선 추출
georgia.outline
plot(georgia, col = "yellow", bg = "wheat", lty = 5, border = "red")
plot(georgia.outline, lwd = 3, add = TRUE) # 경계선 표시
title(main = "The State of Georgia", font.main = 2, cex.main = 3.5,sub = "and its counties", font.sub = 6, col.sub = "blue") # 제목 추가

 

# 좌표지정
Lat <- data.frame(georgia)[,1] #Y or North/South
Lon <- data.frame(georgia)[,2] #X or East/West

 

# county명을 라벨로 지정
Names <- data.frame(georgia)[,13]

 

# 지도에 라벨 표시
par(mar = c(0,0,0,0)) #plot영역의 마진을 설정
plot(georgia, col = NA)
pl <- pointLabel(Lon, Lat, Names, offset = 0, cex =.5)

 

######################################################################################################################################

 

# 일부의 county 추출
county.tmp <- c(81, 82, 83, 150, 62, 53, 21, 16, 124, 121, 17)
county.tmp
georgia.sub <- georgia[county.tmp,]
georgia.sub
write.csv(georgia.sub,"sub.csv")

 

# 추출된 county들만 지도에 표시
par(mar = c(0,0,3,0))
plot(georgia.sub, col = "gold1", border = "grey")
plot(georgia.outline, add = TRUE, lwd = 2)
title("A subset of Georgia", cex.main = 2, font.main = 1)
pl <- pointLabel(Lon[county.tmp], Lat[county.tmp],Names[county.tmp], offset = 3, cex = 1.5)

 

# Georgia 전체 지도에서 추출된 county 표시
plot(georgia, border = "grey", lwd = 0.5)
plot(georgia.sub, add = TRUE, col = "lightblue")
plot(georgia.outline, lwd = 2, add = TRUE)
title("Georgia with a subset of counties")

 

## OpenStreetMap 패키지
library(OpenStreetMap)

 

# 왼쪽 위와 오른쪽 아래 모서리 지정
ul <- as.vector(cbind(bbox(georgia.sub)[2,2], bbox(georgia.sub)[1,1]))
lr <- as.vector(cbind(bbox(georgia.sub)[2,1], bbox(georgia.sub)[1,2]))

# 오픈맵 내려받기
MyMap <- openmap(ul,lr,9,'mapquest')

par(mar = c(0,0,0,0))
plot(MyMap, removeMargin=FALSE) # 배경 그리기
plot(spTransform(georgia.sub, osm()), add = TRUE, lwd = 2) # 주 경계선 그리기

 

## RgoogleMaps 패키지
library(RgoogleMaps)
library(maptools)

 

# 추출된 county들을 PolySet 형식으로 변환
shp <- SpatialPolygons2PolySet(georgia.sub)

 

# 추출된 county들을 범위
bb <- qbbox(lat = shp[,"Y"], lon = shp[,"X"])

 

# 지도 데이터를 내려받아 DC.jpg로 저장
MyMap <- GetMap.bbox(bb$lonR, bb$latR, destfile = "DC.jpg")

par(mar = c(0,0,0,0))
PlotPolysOnStaticMap(MyMap, shp, lwd=2,col = rgb(0.25,0.25,0.25,0.025), add = F)

 

출처: 서울시립대학교 통계학과 박창이 교수님(http://http://statlearn.uos.ac.kr/)

'내가 알아가는 도시 > R programming' 카테고리의 다른 글

[R programming] 결측값  (0) 2017.01.26
[R programming] 역행렬, 행렬식 구하기  (0) 2017.01.26
[R programming] 미분  (0) 2017.01.26