gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:03:54 26 4
gpt4 key购买 nike

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

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

data.frame“poly”包含的字符串现在可以按如下方式转换为实际的“SpatialPolygons”对象(对于第一个字符串)
realWKT(poly[1,1])

我可以为每个字符串做上一个,并将其保存在 vector 中
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[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))"

最佳答案

这似乎可行:

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

关于sql - 从多边形区域中提取的邻居列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com