Shapefile与DataFrame可靠互转及leaflet绘图报错修复
R语言中SF多边形与DataFrame的可靠互转方案
问题根源
你之前的操作错误地将多边形拆分为单个点保存为CSV,丢失了多边形的拓扑结构(比如边界、环的关联关系),导致转回后是POINT类型对象,自然无法用addPolygons绘制多边形。
正确互转步骤
1. 加载依赖包与原始数据
library(sf) library(leaflet) # 加载nc.gpkg的多边形数据 nc <- st_read(system.file("gpkg/nc.gpkg", package = "sf"))
2. SF多边形转可持久化的DataFrame
要保留多边形几何信息,不能拆分坐标为点,而是用WKT格式存储完整几何:
方式一:手动构建含WKT几何列的DataFrame
# 移除sf对象的几何属性,得到普通data.frame nc_df <- st_set_geometry(nc, NULL) # 将多边形几何转为WKT字符串存入新列 nc_df$geometry_wkt <- st_as_text(st_geometry(nc))
方式二:直接保存为GeoCSV(推荐)
sf支持直接保存带几何信息的CSV,自动处理WKT格式:
# 保存为GeoCSV,指定几何列以WKT格式存储 st_write(nc, "nc_polygons.csv", layer_options = "GEOMETRY=AS_WKT")
3. 从CSV转回SF多边形对象
读取手动构建的DataFrame
# 将WKT列转为sf几何,指定原始坐标系 nc_sf <- st_as_sf(nc_df, wkt = "geometry_wkt", crs = st_crs(nc))
读取GeoCSV文件
# 直接读取GeoCSV,自动识别WKT几何列 nc_sf <- st_read("nc_polygons.csv", geometry_column = "geometry_wkt", quiet = TRUE)
4. 验证绘图功能
# 用leaflet绘制多边形,确认功能正常 leaflet(nc_sf) %>% addTiles() %>% addPolygons(fillOpacity = 0.5, color = "#2c3e50")
关于dput的注意事项
如果要用dput保存数据,必须确保保存的是原始多边形SF对象或含WKT几何列的DataFrame,而不是拆分后的点数据:
# 保存原始多边形sf对象 dput(nc, file = "nc_polygons_dput.txt") # 读取转回 nc_sf <- dget("nc_polygons_dput.txt")
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

