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