ggmap과 네이버 맵 연동

어제 저녁부터 ggmap에 네이버 맵 연동을 해볼 생각으로 코딩을 좀 했는데, 쓸만한 수준의 구현체가 나와 공유하고자 글을 쓴다.
ggmap이 위치 정보 시각화에 상당히 편리한 패키지임에도 국내 전용 지도가 아니어서 다양한 정보를 접할 수 없는 불편한 점이 있었는데, 네이버 staticmap API를 이용해 이 부분을 해결했다.
이걸 구현하는데, 지도의 X,Y 좌표와 그래프의 X,Y 좌표 연동을 하는게 가장 힘든 부분이었던것 같다(이를 위해 맵의 줌 레벨과 맵 해상도로 계산을 좀 해야했다).
위치 정보를 기반으로 주변의 POI(Points of Interest)를 함께 봐야 했던 나로서는 필요한 구현이라 생각한다. 구글맵은 이런 정보가 정말 부실하다.

예로서 지진 데이터와 네이버 맵을 기반으로 수도권 진원지 분포를 그려봤다. 네이버 지도에 traffic레이어를 추가해 현재(2013-08-09 12:21:09) 교통 현황도 올려봤다(지진과 별 상관은 없지만…).

eq <- read.table(url("http://dl.dropbox.com/u/8686172/eq.csv", encoding = "euc-kr"), 
    sep = "\t", header = T, stringsAsFactors = F)

eq$latitude <- unlist(strsplit(eq$latitude, " "))[seq(from = 1, to = nrow(eq), 
    by = 2)]
eq$longitude <- unlist(strsplit(eq$longitude, " "))[seq(from = 1, to = nrow(eq), 
    by = 2)]

library(lubridate)
eq$longitude <- as.double(eq$longitude)
eq$latitude <- as.double(eq$latitude)
eq$year <- as.factor(substr(eq$date, 1, 4))
eq$date <- ymd_hm(eq$date)

cent <- c(126.96136, 37.52962)

library(ggmap)
bmap <- ggmap(get_navermap(center = cent, level = 4, baselayer = "default", 
    overlayers = c("anno_satellite", "traffic"), marker = data.frame(cent[1], 
        cent[2]), key = "c75a09166a38196955adee04d3a51bf8", uri = "www.r-project.org"), 
    extent = "device", base_layer = ggplot(eq, aes(x = longitude, y = latitude)))

bmap + geom_point(aes(size = power, colour = date), data = eq, alpha = 0.7) + 
    geom_density2d()

plot of chunk unnamed-chunk-1

현재 위 네이버 지도가 포함된 ggmap은 필자의 github에 올라가 있다. 아래와 같은 명령어를 사용하면 설치해서 사용 가능하다.
조만간 ggmap 패키지에 통합요청을 할 생각이다.

library(devtools)
install_github("ggmap", "haven-jeon")

CC BY-NC 4.0 ggmap과 네이버 맵 연동 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.