3차원 GPS 그래프 그리기
rgl을 이용한 3D plot 그리기
구글 맵에서의 루트 나타내기
필자가 예전에 GPS 데이터를 구글맵에서 나타낸 적이 있는데, 똑같은 데이터를 사용하기로 하자. 다음과 같이 사각형의 길을 운전한 데이터이다.
위에서 내려다보면 사각형이지만, 경사진 도로가 포함되어 있는데, 이것을 2D 그래프에서는 나타낼 수 없었다. 따라서 rgl
패키지를 이용하여 3D 그래프를 그리기로 결정했다.
데이터 불러오기
필자가 직접 만든 운전 데이터를 다운받고, GSP 정보만을 따와서 gps_data
에 저장한다.
mytelematics <- read.csv("https://raw.githubusercontent.com/issactoast/theissacleedotcom/master/static/data/sampletrip.csv", header = TRUE, fill = TRUE)
gps_data <- subset(mytelematics, select = c(Timestamp, Long, Lat, Alt.m.))
colnames(gps_data) <- c("Timestamp", "x", "y", "z")
head(gps_data)
>> Timestamp x y z
>> 1 24-May-2019 18:11:23.018 -91.53799 41.66253 197.2922
>> 2 24-May-2019 18:11:23.056 -91.53799 41.66253 197.2922
>> 3 24-May-2019 18:11:23.097 -91.53799 41.66253 197.2821
>> 4 24-May-2019 18:11:23.138 -91.53799 41.66253 197.2821
>> 5 24-May-2019 18:11:23.171 -91.53799 41.66253 197.2821
>> 6 24-May-2019 18:11:23.212 -91.53799 41.66253 197.2821
위도와 경도, 그리고 높이에 대한 정보가 담겨있는 것을 확인 할 수 있다.
rgl 패키지
rgl 패키지는 3d 그래프를 그려주는 도구로 사용하기 아주 유용하다. 왜냐하면 결과로 얻는 그래프를 마우스로 돌려볼 수 있기 때문이다.
library(rgl)
>> Warning: 패키지 'rgl'는 R 버전 4.0.3에서 작성되었습니다
open3d()
>> wgl
>> 1
mfrow3d(1, 1, sharedMouse = TRUE)
rgl에 있는 함수들은 상대적으로 직관적인데, base R의 함수들의 문법을 그대로 쓰고 있기 때문이다. open3d
의 경우는 par
함수과 같다고 생각하면 되고, mfrow3d
는 mfrow
와 기능이 같다고 생각하면 쉽다. 여러개의 그래프를 그리기 위해서는 mfrow3d의 입력값을 조정해주면 된다. 가로 2개로 그리고 싶으면, 2, 1을 입력한다. (2행 1열의 팔레트를 만들어준다.)
plot3d(gps_data[,2:4], col = "red", size = 5, type = "l")
You must enable Javascript to view this page properly.
plot3d
함수도 plot
과 문법이 똑같으므로 설명은 생략한다. 결과를 살펴보면, 위에서 사각형으로 보이던 도로가 옆에서 보면 오르막과 내리막이 있는 것을 확인할 수 있다. 마우스로 돌려보며 확인해보자.
빨간 선의 시작점과 끝점이 만나지 않고 있는데, 이것으로 보아 GPS의 높이 정보가 그렇게 정확하지 않다는 것을 알 수 있다. 반면, 좌우에 대한 정보는 비교적 정확한데, 왜냐면 위에서 보았을 때 사각형의 도로 모양은 잘 나오기 때문이다.
rgl을 이용할 때, 꼭 썼던 팔레트는 지워주는 습관을 들이자.
clear3d()