我在将一组集群几何体与他们自己的所有权关联时遇到了一些问题。
数据
我有一个包含一组几何图形的表格,
buildings {
gid integer,
geom geometry(Multipoligon,4326)
}
我已经在“建筑物”表上运行了 ST_ClusterWithin函数,并设置了一定的阈值进行聚类分析。从该聚类分析中,我得到了一个名为“clusters”的表。
clusters {
cid Integer,
geom geometry(GeometryCollection,4326)
}
问题
我希望能够提取所有几何信息及其关联的聚类信息,并将其放入表格中。
clustered_building {
gid Integer
cid Integer
geom geometry(Multipoligon,4326)
}
gid | cid | geom |
-----+------------+-----------------------+
1 | 1 | multypoligon(...) |
2 | 1 | multypoligon(...) |
3 | 1 | multypoligon(...) |
4 | 2 | multypoligon(...) |
5 | 3 | multypoligon(...) |
6 | 3 | multypoligon(...) |
我做了什么(但不起作用)
我一直在尝试使用两个函数ST_GeometryN/ST_NumGeometries解析每个MultyGeometry,并使用这个查询从ST_Geometry手册页面的标准示例中提取聚类信息。
INSERT INTO clustered_building (cid, c_item , geom)
SELECT sel.cid, n, ST_GeometryN(sel.geom, n) as singlegeom
FROM ( SELECT cid, geom, ST_NumGeometries(geom) as num
FROM clusters") AS sel
CROSS JOIN generate_series(1,sel.num) n
WHERE n <= ST_NumGeometries(sel.geom);
如果我强制使用一系列10个查询,它需要几秒钟的时间。
CROSS JOIN generate_series(1,10)
但是当我要求根据每个GeometryCollection中的项目数量生成一系列时,它卡住了。 而且,由于我丢失了“gid”,这个查询不允许我将单个几何图形链接到其自己的建筑表中的特征。
请问有人能帮帮我吗? 谢谢。
Stefano