在横断面上创建等距离点的问题

问题描述 投票:0回答:1

我尝试使用 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()
函数。

但是,它无法工作。

r distance
1个回答
0
投票

看起来该示例与函数“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)
© www.soinside.com 2019 - 2024. All rights reserved.