让我们假设一行长度为SpatialLines
的类len
的一段。这条特殊的线从左上角开始。
library(sp)
x <- structure(list(x = c(-7.23437435517476, 6.35937810318614, -5.86718660792582,
7.96094089282062), y = c(7.08139459814975, 6.8633712983227, -7.61337581019376,
-6.2180266913006)), .Names = c("x", "y"))
xline <- SpatialLines(list(Lines(Line(x), ID = 1)))
#len <- LineLength(as.matrix(data.frame(x)))
len <- LineLength(as.matrix(data.frame(coordinates(xline))))
plot(0,0, xlim = c(-10, 10), ylim = c(-10, 10), type = "n")
lines(xline)
我想在这一行找到一个距离行首findme
个单位的点。例如,如果我要从头开始寻找一个10个单位的点,我会在第一个和第二个段之间的节点附近得到一个点。您对更强大的解决方案的投入最受欢迎。
我试图使用spsample
(见下文)找到它,但这种方法(太)不可靠,并且不适用于该行的后半部分。
# very approximate method, not very suitable
findme <- 11 # 11, 12 and 13 give same result
segs <- 1/(findme/xline.length)
xsam <- spsample(x = xline, n = segs, type = "regular", offset = 0)
points(xsam)
答案 0 :(得分:4)
以下步骤将帮助您找到坐标。
线路的一般信息:
library(np)
coord <- coordinates(xline)[[1]][[1]]
nLines <- nrow(coord) - 1
#lengths <- sapply(seq_len(nLines), function(x) LineLength(coord[c(x, x + 1), ]))
lengths <- LineLength(coord, sum = FALSE)
找到新坐标:
findme <- 11 # the distance of the new coordinates
distances <- cumsum(lengths) - findme # distances from the nodes
segment <- which(distances >= 0)[1] # the segment of interest
distToNode <- distances[segment]
ratio <- distToNode / lengths[segment]
segCoord <- coord[c(segment, segment + 1), ]
newCoord <- (1 - ratio) * segCoord[2 , ] + ratio * segCoord[1 , ]
简介:
points(newCoord[1], newCoord[2])
答案 1 :(得分:0)
你可以:
如果这不是完整的解决方案,我很抱歉。但也许它会给你一种可以解决的方法。
希望有帮助...