Как получить список SpatialLines различий только для пересекающихся SpatialLines?Как получить различия между пересекающимися SpatialLines в R?
создать SpatialLines:
#from the sp vignette:
l1 = cbind(c(1,2,3,4),c(3,2,2,4))
rownames(l1) = letters[1:4]
l2 = cbind(c(2,2,3,3),c(3,2,2,5))
rownames(l2) = letters[1:4]
l3 = cbind(c(1,2,3,4),c(1,2,2,1))
rownames(l3) = letters[1:4]
Sl1 = Line(l1)
Sl2 = Line(l2)
Sl3 = Line(l3)
Ll1 = Lines(list(Sl1), ID="a")
Ll2 = Lines(list(Sl2), ID="b")
Ll3 = Lines(list(Sl3), ID="c")
Sl = SpatialLines(list(Ll1,Ll2,Ll3))
в результате SpatialLines ("Sl") показать перекрестки и различия. Получение различия всех SpatialLines списка может быть достигнуто следующим образом:
C = combn(1:length(Sl),2)
C2 = cbind(C,C[2:1,])
MyDiffs = apply(C2, 2, function(x){gDifference(Sl[x[1]], Sl[x[2]])})
см spacedman´s answer to this question
В поисках различий только пересекающимися SpatialLines. Я думал о чем-то вроде, если условие gIntersect=TRUE
затем применить gDifference()
. Тем не менее, я не могу найти способ сделать это в R. Может быть there's умнее решение ...
Edit: Ответ bogdata работ, но все различия появляются дважды. Манипулирование матрицы таким образом, что нижняя треугольная часть удаляется, приводит к тому, что некоторые удвоенные различия сохраняются, а другие удаляются.
library("reshape2")
# compute intersection matrix by ID
intersections <- gIntersects(Sl, byid=TRUE)
# set lower triangular part of matrix NA
intersections[lower.tri(intersections, diag = TRUE)] <- NA
# melt matrix into edge list (+remove NA)
intersections <- melt(intersections, na.rm=TRUE)
# compute differences
MyDiffs = apply(intersections, 1, function(x){gDifference(Sl[x[1]], Sl[x[2]])})
Любые предложения?
Он работает, но все различия появляются дважды. Любые предложения о том, как создавать каждую разницу только один раз? –
Чтобы получить только одну строку за разницу, можно применить 'gLineMerge()'. Однако это дополнительный шаг, который можно было бы избежать с помощью расширенного интеллектуального анализа данных. –
Попробуйте подмножество на 'Var1
bogdata