如何将R生成的CSV中的几何数据转为Polygon并导出为Shapefile?
处理特殊几何格式并导出为Shapefile
核心思路
这份几何数据是先按顺序存储所有经度,再按顺序存储对应纬度的一维向量,被list()包裹。我们需要先解析出向量,拆分经纬度配对成坐标点,再构建Polygon对象,最终导出为Shapefile。
具体步骤(基于R语言)
- 加载必备工具包:用
sf处理空间数据,dplyr完成数据清洗library(sf) library(dplyr) - 读取目标CSV文件(假设几何数据列名为
geometry)df <- read.csv("dc_tracts.csv", stringsAsFactors = FALSE) - 解析几何字符串为数值向量:把
list(c(...))格式的文本转为R可识别的数值向量df$geom_vec <- lapply(df$geometry, function(x) { # 剔除外层的list()包裹,保留核心的c(...)部分 vec_str <- gsub("^list\\(|\\)$", "", x) # 解析字符串为数值向量 eval(parse(text = vec_str)) }) - 拆分经纬度并构建Polygon对象:
df <- df %>% rowwise() %>% mutate( # 经纬度各占向量一半长度 coord_len = length(geom_vec)/2, lon = geom_vec[1:coord_len], lat = geom_vec[(coord_len+1):(2*coord_len)], # 把经纬度配对成坐标矩阵,再转为Polygon polygon = st_polygon(list(cbind(lon, lat))) ) %>% ungroup() - 转为标准空间对象并设置坐标系(华盛顿特区使用WGS84坐标系,EPSG代码为4326)
sf_df <- st_sf(df, geometry = df$polygon, crs = 4326) # 移除中间生成的临时列(可选操作) sf_df <- sf_df %>% select(-geometry, -geom_vec, -coord_len, -lon, -lat) - 导出为Shapefile文件
st_write(sf_df, "dc_tracts.shp", delete_layer = TRUE)
注意事项
- 若CSV中几何字符串存在格式差异(如多余空格、换行),需微调
gsub的正则表达式 - 确保所有tract的几何向量长度为偶数,保证经纬度能一一配对
- 如需使用其他坐标系,替换
crs参数对应的EPSG代码即可(例如UTM18N坐标系为EPSG:32618)
内容的提问来源于stack exchange,提问作者jimmy
相关产品推荐
相关产品推荐

