R SF: st_sample生成几何与shapefile导出sf几何格式互通及rbind绑定问题
格式差异说明
你看到的两种geometry显示格式不存在本质区别,完全互通:
c(lon = 149096.638762965, lat = 175644.870597937)和c(151510.88605718, 177463.801340721)都是sf标准POINT几何的存储形式,差异仅为坐标值向量是否带lon/lat的命名属性:命名是st_sample生成点时默认加的坐标标签,读入shapefile时GDAL不会给坐标加名称属性,所以显示为无名向量。- 两种格式的空间计算、投影转换、导出等操作效果完全一致,不会有兼容性问题。
拼接操作说明
不能直接对st_sample的原始返回值和shapefile读入的sf数据框用rbind,需要先做简单的格式统一:
- 首先将
st_sample返回的sfc几何向量转为和原有sf数据结构一致的sf数据框,保证坐标系(CRS)、geometry列名完全匹配,如果原有数据有自定义属性列可以同步补全默认值:
library(sf) # 示例:原有shapefile读入的sf对象为shp_sf,对polygon对象生成100个采样点 sample_geom <- st_sample(polygon, size = 100) sample_sf <- st_sf( # 此处可补全原有shp_sf中的属性列,比如原有列name可加 name = "随机采样点", geometry = sample_geom, crs = st_crs(shp_sf) )
- 格式统一后即可正常用
rbind拼接:
combined_sf <- rbind(shp_sf, sample_sf)
如果介意坐标命名的显示差异,也可以手动去除采样点的坐标名,不影响任何功能:
st_geometry(sample_sf) <- lapply(st_geometry(sample_sf), function(x) { names(x) <- NULL return(x) })
内容的提问来源于stack exchange,提问作者Jingjun
相关产品推荐
相关产品推荐

