使用CurveTransect创建样带等距点时遇报错求助
解决CurveTransect中observerXY函数的插槽访问报错问题
问题核心在于observerXY函数要求传入SpatialLines类对象,但你将处理好的transect(SpatialLines类型)转换成了matrix,导致函数试图访问不存在的lines插槽,触发报错。
修正方案
直接使用经过平滑、投影后的transect对象传入observerXY,无需将其转换为matrix或数据框。
修正后的完整代码
transectXY = data.frame(matrix(nrow=11, ncol=2)) colnames(transectXY) = c("x", "y") transectXY$x = c(1096002, 1096052, 1096002, 1095952, 1096002, 1096052, 1096002, 1095952, 1096002, 1096052, 1096002) transectXY$y = c(-39178.7, -39078.7, -38978.7, -38878.7, -38778.7, -38678.7, -38578.7, -38478.7, -38378.7, -38278.7, -38178.7) transectXY = data.matrix(transectXY) library(Orcs) #coords2Line transect = coords2Lines(transectXY, ID="A") # transectXY into line library(smoothr) #curve smoothing transect = smooth(transect, method="chaikin") # smooth line projected = CRS("+proj=utm +zone=17 +ellps=intl +units=m +datum=WGS84 +no_defs") # add a crs proj4string(transect) = projected plot(transect) library(rgeos) # gLength length = round(gLength(transect)) # 关键修改:删除转换为matrix的代码,直接传入SpatialLines对象transect transect_points = observerXY(transect=transect, spacing=1)
原因解释
observerXY是CurveTransect工具的专用函数,内部逻辑依赖SpatialLines对象的lines插槽结构读取线坐标信息。matrix和普通数据框都没有这种插槽结构,因此即使转换为数据框也无法解决问题,必须传入完整的SpatialLines对象才能让函数正常解析线数据并生成等距点。
内容的提问来源于stack exchange,提问作者ai-mei
相关产品推荐
相关产品推荐

