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

时间:2015-10-21 16:09:43

标签: r gis sp

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

是否有任何功能可以将道路像素转换为类 SpatialLines 的对象,或者是否有人知道更好的方法来查找每条线路上的道路交叉点数量?

我开始重新分类我的栅格以获得仅道路像素:

SmsManager sms = SmsManager.getDefault();
ArrayList<String> dividedText = sms.divideMessage(message);
for (String shortMessage : dividedText) {
    sms.sendTextMessage(phoneNumber,null,shortMessage,null,null);
    }

1 个答案:

答案 0 :(得分:2)

您可以使用光栅包获取几条道路以获得交叉点数。例如:

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)

然后使用相邻的函数