Vẽ bản đồ Đồng bằng sông Cửu Long bằng R với dữ liệu GeoJSON

November 23, 2021

Ghi chú cách vẽ bản đồ Đồng bằng sông Cửu Long bằng R với dữ liệu GeoJSON.

Dữ liệu GeoJSON cần thiết

Xem thử dữ liệu GeoJSON bằng mapshaper: mapshaper.org

Dữ liệu xem ở mapshaper: Việt Nam, Campuchia, hệ thống sông ngòi Việt Nam.

mapshaper có thể xuất dữ liệu GeoJSON thành các định dạng khác. Ví dụ SVG:

Vẽ bản đồ Đồng bằng sông Cửu Long

Bản đồ được vẽ bằng cách kết hợp 3 dữ liệu GeoJSON ở trên. Code R đầy đủ: Vietnam-mekong-delta-map.R

Dùng thư viện geojsonio để đọc dữ liệu GeoJSON: spdf_cambodia, spdf_vietnam, spdf_vietnam_rivers

# Load geojsonio library
library(geojsonio)
# Load geojson from files
spdf_cambodia <- geojson_read("cambodia_provinces.geojson",  what = "sp")
spdf_vietnam <- geojson_read("vietnam_provinces.geojson",  what = "sp")
spdf_vietnam_rivers <- geojson_read("vietnam_provinces.geojson",  what = "sp")

Tạo bản đồ 13 tỉnh đồng bằng sông Cửu Long từ bản đồ cấp tỉnh Việt Nam: spdf_vmd

# List of Vietnamese Mekong Delta Province
vmd_provinces <- c("An Giang", "Dong Thap", "Bac Lieu", "Can Tho", "Hau Giang",
                   "Ben Tre", "Tien Giang", "Long An", "Ca Mau", "Tra Vinh",
                   "Kien Giang", "Vinh Long", "Soc Trang", "Phu Quoc (Kien Giang)")
# Vietnamse Mekong Delta provinces
spdf_vmd <-  spdf_vietnam[FALSE,]

for(i in 1:length(vmd_provinces)) {
  spdf_vmd <- rbind.SpatialPolygonsDataFrame(spdf_vmd, spdf_vietnam[spdf_vietnam$Name_EN==vmd_provinces[i],])
}

Dùng thư viện broom để ‘fortify’ dữ liệu GeoJSON vừa đọc: spdf_fortified_cambodia, spdf_fortified_vietnam, spdf_fortified_vmd, spdf_fortified_vietnam_rivers

# Load broom library
library(broom)
# 'fortify' the data to get a dataframe format required by ggplot2
spdf_fortified_cambodia <- tidy(spdf_cambodia)
spdf_fortified_vietnam <- tidy(spdf_vietnam)
spdf_fortified_vmd <- tidy(spdf_vmd)
spdf_fortified_vietnam_rivers <- tidy(spdf_vietnam_rivers)

Dùng thư viện ggplot2 để vẽ bản đồ bằng cách kết hợp 4 dữ liệu đã được fortity ở trên. Crop bản đồ theo giới hạn kinh độ và vĩ độ trong khoảng (103.9, 107.5)(8.5, 11). Có thể sử dụng các hàm khác của ggplot2 để thêm các nội dung khác (tên địa danh, ký hiệu, layers).

# Load ggplot2 library
library(ggplot2)
#Plot
ggplot() +
  geom_polygon(data = spdf_fortified_cambodia, aes( x = long, y = lat, group = group), fill="#dfdedaff", color="#4484a5ff") +
  geom_polygon(data = spdf_fortified_vietnam, aes( x = long, y = lat, group = group), fill="#adb09aff", color="#4484a5ff")+
  geom_polygon(data = spdf_fortified_vmd, aes( x = long, y = lat, group = group), fill="#fefbe6ff", color="#4484a5ff")+
  geom_path(data = spdf_fortified_vietnam_rivers, aes( x = long, y = lat, group = group), fill=NA, color="blue")+
  coord_map(xlim = c(103.9, 107.5),ylim = c(8.5, 11))+
  theme_void()+
  theme(panel.background = element_rect(fill = "#c4e6efff")) # sea

Kết quả

Bản đồ đồng bằng sông Cửu Long bằng R.

Read more posts

Other posts…