0

我有两个清单;它们都包含 gpc.poly 类的多边形。

第一个列表是“ptareas”:

    > ptareas
    $AG00035
    GPC Polygon
       Num. Contours:  1 
       Num. Vertices:  2000 
       BBox (X):  5.999999 --> 6.000001 
       BBox (Y):  11 --> 11 

    $AG00036
    GPC Polygon
       Num. Contours:  1 
       Num. Vertices:  2000 
       BBox (X):  9.999999 --> 10 
       BBox (Y):  4.999999 --> 5.000001

第二个列表是“isect_polys”:

> isect_polys
[[1]]
GPC Polygon
   Num. Contours:  2 
   BBox (X):  4.928932 --> 25.07107 
   BBox (Y):  -2.071068 --> 25.07107 

[[2]]
GPC Polygon
   Num. Contours:  1 
   Num. Vertices:  1028 
   BBox (X):  4.928932 --> 11.23867 
   BBox (Y):  3.953478 --> 12.02995 

[[3]]
GPC Polygon
   Num. Contours:  2 
   BBox (X):  4.928932 --> 25.07107 
   BBox (Y):  -2.071068 --> 25.07107 

[[4]]
GPC Polygon
   Num. Contours:  1 
   Num. Vertices:  1028 
   BBox (X):  4.928932 --> 11.23867 
   BBox (Y):  3.953478 --> 12.02995 

[[5]]
GPC Polygon
   Num. Contours:  2 
   BBox (X):  4.928932 --> 25.07107 
   BBox (Y):  -2.071068 --> 25.07107 

[[6]]
GPC Polygon
   Num. Contours:  1 
   Num. Vertices:  1028 
   BBox (X):  4.928932 --> 11.23867 
   BBox (Y):  3.953478 --> 12.02995 

我正在尝试(并且失败)做的事情非常简单。我想将 ptareas 中的每个多边形与 isect_polys 中的每个多边形相交。实际上,每次我运行脚本时,每个列表的长度都会有所不同,但对于这个例子,我试图找到一种方法来自动化以下操作:

intersect(ptareas[[1]],isect_polys[[1]])
intersect(ptareas[[1]],isect_polys[[2]])
intersect(ptareas[[1]],isect_polys[[3]])
intersect(ptareas[[1]],isect_polys[[4]])
intersect(ptareas[[1]],isect_polys[[5]])
intersect(ptareas[[1]],isect_polys[[6]])
intersect(ptareas[[2]],isect_polys[[1]])
intersect(ptareas[[2]],isect_polys[[2]])
intersect(ptareas[[2]],isect_polys[[3]])
intersect(ptareas[[2]],isect_polys[[4]])
intersect(ptareas[[2]],isect_polys[[5]])
intersect(ptareas[[2]],isect_polys[[6]])

如果我正在处理矩阵,我只需将 ptareas 设为单列矩阵,将 isect_polys 设为单行矩阵,然后执行类似于下面的矩阵乘法的操作:

> m1<- matrix(c(1,2),2,1)
> m1
     [,1]
[1,]    1
[2,]    2
> m2<- matrix(c(1:6),1,6)
> m2
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
> m1 %*% m2
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    2    4    6    8   10   12

不幸的是,我不能强迫 r 让我以同样的方式处理多边形列表,所以我希望有人可以解释如何使用其中一个 apply 函数来实现相同类型的成对交互。作为一个新手用户,在处理多个列表时,我发现这些功能很难实现。由于我在以前的帖子中找不到类似的例子,其他人一定能够轻松解决类似的两个列表问题,而且我相当肯定我错过了一些非常基本的东西。任何帮助将不胜感激。

4

1 回答 1

0

如果没有可重现的示例,很难做到这一点。但我想你想对 2 个列表中的所有多边形进行外部交集。

## First I generate combinations of the supplied
dd <- expand.grid(seq_along(ptareas),seq_along(isect_polys))
## Using mapply to test intersection (1-1,2-2,...
mapply(function(x,y)intersect(ptareas[[x]],isect_polys[[y]]),
       dd$Var1,dd$Var2)

注意方面:许可gpclib是惊人的,也许你应该使用rgeos包。

于 2013-04-18T22:04:33.270 回答