如何在R中将3D Line String/3D Multi Line String导出为Shapefile?
解决3D Multi Line String导出Shapefile的报错问题
Shapefile规范原生不支持3D Multi Line String类型,这就是触发该GDAL报错的原因,以下是两种可行的解决方法:
方法一:转成2D几何(移除Z坐标)
如果不需要保留Z坐标,用**st_zm()**函数移除几何对象的Z维度,转成2D类型后即可正常导出:
library(sf) g1 = st_multilinestring(list(rbind(c(0,1,2),c(0,2,3)))) sd = st_sf(geometry=st_sfc(g1), crs=27700) # 移除Z坐标,转换为2D几何 sd_2d <- st_zm(sd, drop = TRUE, what = "Z") st_write(sd_2d, "out.shp")
方法二:保留Z坐标,用SHPT参数强制指定类型
如果需要保留Z坐标信息,可以在**st_write()**里通过layer_options参数传递GDAL的SHPT选项,指定为支持带Z值的线类型(ARCZ),Shapefile会自动将3D MultiLineString拆分为多个带Z的线串存储:
library(sf) g1 = st_multilinestring(list(rbind(c(0,1,2),c(0,2,3)))) sd = st_sf(geometry=st_sfc(g1), crs=27700) # 指定SHPT=ARCZ,保留Z坐标导出 st_write(sd, "out.shp", layer_options = "SHPT=ARCZ")
补充说明
- **
st_zm()**的what="Z"明确指定移除Z坐标,drop=TRUE表示直接删除该维度,而非将Z值设为0 SHPT=ARCZ是GDAL Shapefile驱动支持的参数,用来覆盖默认的几何类型检测,确保带Z值的几何能被正确写入
内容的提问来源于stack exchange,提问作者Bharadwaj A K
相关产品推荐
相关产品推荐

