Mục tiêu

Đây là bài thực hành vẽ bản đồ địa hình 2D với gói ggplot2. Việc sử dụng gói này giúp chúng ta dễ dàng hiệu chỉnh bản đồ theo ý muốn. Sau đó sẽ chuyển đổi sang dạng 3D với gói rayrender

Gọi các gói lệnh cần sử dụng

library(raster)
library(ggplot2)
library(viridis)
library(rayshader)

Mở file DEM

Mở bản đồ địa hình của ô mẫu nghiên cứu. Sau đó chuyển sang dạng bảng với các cột kinh độ, vĩ độ và cao độ của từng điểm trên raster bằng hàm rasterToPoints(). Vì để vẽ với ggplot() ta cần bảng ở định dạng này.

#library(raster)
myplot_DEM <- raster("https://github.com/nlxbach/data/raw/main/myplot.tif")

df_myplot_DEM <- data.frame(rasterToPoints(myplot_DEM))
colnames(df_myplot_DEM) <- c("Longitude","Latitude","Elevation")

head(df_myplot_DEM)
##   Longitude Latitude Elevation
## 1  214467.5  1337231      1745
## 2  214559.0  1337231      1766
## 3  214650.5  1337231      1770
## 4  214742.1  1337231      1744
## 5  214833.6  1337231      1651
## 6  214925.1  1337231      1614

Vẽ bản đồ 2D

Chúng ta vẽ bản đồ raster ở dạng 2D với gói ggplot2 như sau:

#library(ggplot2)

gg <- ggplot(df_myplot_DEM, aes(x = Longitude, y = Latitude, fill = Elevation)) +
  geom_raster() + coord_fixed() + theme_bw()
gg

Có thể thay đổi màu sắc cho đẹp hơn:

gg <- ggplot(df_myplot_DEM, aes(x = Longitude, y = Latitude, fill = Elevation)) +
   geom_raster() + 
   scale_fill_gradientn("Elevation", colours = terrain.colors(10)) + 
   coord_fixed() + theme_bw()
gg

Hay với bộ màu magma của gói viridis

#library(viridis)

gg <- ggplot(df_myplot_DEM,aes(x = Longitude, y = Latitude, fill = Elevation)) +
  geom_tile() +
  scale_fill_viridis(option = "magma", direction = -1) +
  coord_fixed() + theme_bw()

gg

Chuyển đổi từ bản đồ 2D sang 3D

Để chuyển đổi, ta có thể sử dụng hàm plot_gg() của gói rayshader

#library(rayshader)
plot_gg(gg, width = 5, height = 3, scale = 200, windowsize = c(1400, 800), zoom = 0.6)