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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:07:33