You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:45:35