我尝试使用 CurveTransect 在横断面上创建等距点。 https://github.com/esbach/CurveTransect
但是,我总是遇到错误。
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)
print(plot)
library(rgeos) # gLength
length = round(gLength(transect))
transectXY = data.matrix(transect@lines[[1]]@Lines[[1]]@coords)
**transectXY = observerXY(transect=transectXY, spacing=1)** in this step!!
is.data.frame(frame) 中的错误: 尝试从没有插槽的基本类(“矩阵”)的对象中获取插槽“线”
我无法解决这个问题。有人能帮我吗?谢谢!
此错误消息表明该函数正在尝试从“matrix”类的对象访问名为“lines”的槽,该对象没有任何槽。
我尝试使用
as.data.frame()
函数将矩阵转换为数据框,然后再将其传递给 observerXY()
函数。
但是,它无法工作。
看起来该示例与函数“observerXY”的正确版本不匹配。该函数采用 SpatialLinesDataFrame 并自动执行您发布的倒数第二行(即,您不需要
transectXY = data.matrix(transect@lines[[1]]@Lines[[1]]@coords)
。
在
length = round(gLength(transect))
之后,您可以使用以下内容:
transectXY = observerXY(transect=transect, spacing=1)
这是一个完全可重现的结果:
library(Orcs)
library(smoothr)
library(sp)
library(CurveTransect)
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)
transect = coords2Lines(transectXY, ID="A") # transectXY into line
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
transectXY = observerXY(transect=transect, spacing=100)
coordinates(transectXY) = ~x.obs + y.obs
plot(transect)
points(transectXY, col="red", pch=20)