从多边形区域中提取的邻居列表

时间:2014-07-25 19:35:56

标签: sql database r compiler-errors

我有一个包含一些编码多边形结构的SQL数据库。这些可以提取如下

poly <- data.frame(sqldf("SELECT ST_astext(geometry) FROM table"))

data.frame&#39; poly&#39;包含现在可以转换为真实&#39; SpatialPolygons&#39;对象如下(对于第一个字符串)

realWKT(poly[1,1])

我可以为每个字符串执行上一个字符串,并将其保存在向量

list <- c()
for (i in 1:100){
   list <- c(list, readWKT(poly[i,1])
}

我要做的最后一件事是通过利用以下函数创建一个基于所有SpatialPolygons的邻居列表

poly2nb(list)

但遗憾的是,此命令会导致以下错误

Error: extends(class(pl), "SpatialPolygons") is not TRUE

我知道问题与列表的类型有关,但我真的没有看到出路..任何帮助都将不胜感激!

修改

如建议的那样,输出的某些部分。请记住,&#39; poly&#39;是非常长的坐标串

> poly[1,1]
[1] "POLYGON((4.155976 50.78233,...,4.153225 50.76121,4.152384 50.761191,4.151878 50.761194,4.151319 50.761163,4.150872 50.761126))"

> poly[2,1]
[1] "POLYGON((5.139526 50.914059,...,5.140994 50.913612,5.156976 50.895945))"

1 个答案:

答案 0 :(得分:0)

这似乎有效:

list <- lapply(1:2,function(i)readWKT(poly[i,1],id=i))
sp   <- SpatialPolygons(lapply(list,function(sp)sp@polygons[[1]]))
library(spdep)
poly2nb(sp)

SpatialPolygons的内部结构相当复杂。 SpatialPolygons对象是Polygons个对象(代表地理位置)的集合(列表),每个对象都是Polygon个对象的列表,表示几何形状。例如,代表美国州的SpatialPolygons对象有50个左右的Polygons个对象(每个州一个),每个对象可以有多个Polygon个对象(如果是不是连续的,例如有岛屿等)。

看起来poly2nb(...)需要 单个 SpatialPolygons对象,并根据所包含的Polygons个对象列表计算邻域结构。您正在传递SpatialPolygons个对象的 列表

因此,挑战在于将SQL查询的结果转换为单个SpatialPolygons对象。 readWKT(...)将每一行转换为SpatialPolygons个对象,每个对象只包含一个Polygons个对象。所以你必须提取它们并将它们重新组装成一个SpatialPolygons对象。这一行:

sp <- SpatialPolygons(lapply(list,function(sp)sp@polygons[[1]]))

那样做。前一行:

list <- lapply(1:2,function(i)readWKT(poly[i,1],id=i))

替换你的for (...)循环,并为每个多边形添加一个多边形id,这对于调用SpatialPolygons(...)是必需的。