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함수과 같다고 생각하면 되고, mfrow3dmfrow와 기능이 같다고 생각하면 쉽다. 여러개의 그래프를 그리기 위해서는 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()
Avatar
이삭
PhD candidate

I believe anyone can learn anything with a proper education process.

comments powered by Disqus
Next
Previous