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
- Dữ liệu các đơn vị hành chính cấp tỉnh của Việt Nam: vietnam_provinces.geojson, dữ liệu gốc opendevelopmentmekong
- Dữ liệu các đơn vị hành chính cấp tỉnh của Campuchia: cambodia_provinces.geojson, dữ liệu gốc amerigeoss (cần chuyển đuôi từ .json sang .geojson)
- Dữ liệu sông ngòi ở Việt Nam: vietnam_rivers.geojson, dữ liệu gốc opendevelopmentmekong
Xem thử dữ liệu GeoJSON bằng mapshaper: mapshaper.org
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) và (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ả