查找沿空间线的像素交叉点数

Find the number of pixel intersections along spatial lines

我有一个带有道路像素的栅格和一组用函数 SpatialLines(包 sp)定义的线。对于每一行,我想找到与道路交叉的数量。我的想法是,首先将道路像素转换为class SpatialLines的对象,然后使用函数gIntersection作为在 How to get the intersection point of two vector

是否有任何函数可以将道路像素转换为 class SpatialLines 的对象,或者有人知道找到沿每条线的道路交叉口数量的更好方法吗?

我开始重新class化我的栅格以仅获取道路像素:

m <- c(1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,1)
r <- matrix(m, ncol=2, byrow=TRUE)
rc <- reclassify(data.raster, r)

您可以使用栅格包走几条路来获取交叉路口的数量。例如:

library(raster)
# Example data
# lines
cds1 <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60))
cds2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55))
cds3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45))
lines <- spLines(cds1, cds2, cds3)

# raster
r <- raster(ncols=90, nrows=45)
values(r) <- sample(1:10, ncell(r), replace=TRUE)


roads <- subs(r, data.frame(from=10, to=1)) 
rline <- rasterize(lines, roads, field=1, fun='sum')

m <- mask(rline, roads)
cellStats(m, 'sum')

一条不同的路线:

e <- extract(r, lines)
s <- sapply(e, function(x) sum(x==10, na.rm=TRUE))
sum(s)

也许这解决了皮埃尔对重复计算的担忧。只计算不相邻的交叉路口:

e <- extract(r, lines)
s <- sapply(e, function(x) sum(diff(c(FALSE, x==10)) == 1, na.rm=TRUE))
sum(s)

也可以通过

查看邻接关系
e <- extract(r, lines, cellnumbers=TRUE)

然后使用相邻函数