【问题标题】:Neighbours list extracted out of polygon regions从多边形区域中提取的邻居列表
【发布时间】:2014-07-26 06:35:08
【问题描述】:

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

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

data.frame 'poly' 包含的字符串现在可以转换为真正的 'SpatialPolygons' 对象,如下所示(对于第一个字符串)

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

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

编辑

按照建议,输出的某些部分。请记住,“poly”的行是很长的坐标字符串

> 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))"

【问题讨论】:

  • 如果您至少提供poly 的前几行,您更有可能获得帮助。
  • 这些字符串真的很长。我在编辑中添加了一些部分。
  • 真的吗?没看到??
  • 应该是现在

标签: sql database r compiler-errors


【解决方案1】:

这似乎有效:

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(...) 所必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2012-02-09
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多