如何基于含椭圆参数的DataFrame创建空间椭圆对象?
解决椭圆空间对象创建的错误问题
错误原因
在rowwise()管道后直接调用ellipse时,管道会自动把每行的data.frame作为第一个参数传给ellipse,但sfdep::ellipse并不需要这个参数,因此触发了"unused argument (.)"错误。
解决方案
下面提供两种可行的实现方式,最终都会生成包含所有椭圆的sf空间对象:
方案一:使用pmap批量生成椭圆
library(dplyr) library(sfdep) library(purrr) library(sf) # 生成椭圆并转为sf对象 dat_sf <- dat %>% mutate( # 用pmap遍历每行参数生成椭圆坐标矩阵 ellipse_coords = pmap(list(x, y, sx, sy), ~ ellipse(x = ..1, y = ..2, sx = ..3, sy = ..4, n = 10, rotation = 0)), # 将坐标矩阵转为多边形几何对象 ellipse_geom = map(ellipse_coords, ~ st_polygon(list(.x))) %>% st_sfc() ) %>% # 转为sf空间对象,移除中间坐标列(可选) select(-ellipse_coords) %>% st_as_sf() # 查看结果 dat_sf
方案二:结合rowwise与mutate实现
library(dplyr) library(sfdep) library(sf) dat_sf <- dat %>% rowwise() %>% # 把椭圆坐标矩阵存入列表列,避免管道传递多余参数 mutate(ellipse_coords = list(ellipse(x = x, y = y, sx = sx, sy = sy, n = 10, rotation = 0))) %>% ungroup() %>% # 转换为多边形几何列并转为sf对象 mutate(ellipse_geom = map(ellipse_coords, ~ st_polygon(list(.x))) %>% st_sfc()) %>% select(-ellipse_coords) %>% st_as_sf()
验证结果
生成的dat_sf是标准的sf空间对象,你可以直接用plot(dat_sf)快速查看所有椭圆的空间分布。
内容的提问来源于stack exchange,提问作者erc
相关产品推荐
相关产品推荐

