我有一个存储在几何数组中的边界。(比如{…,…,…})
我的目标是执行stu Contains查询。我想看看节点是否在边界内。
我试过类似的
SELECT ST_Contains(ST_Polygonize((SELECT CAST(bt.geomarray AS geometry[]) FROM boundarytable AS bt)), nodetable.geom)
但我总是会遇到诸如“遇到无效的十六进制字符(,)”之类的错误。
有人能告诉我怎么做吗?
最佳答案
现在我知道怎么做了,我自己来回答这个问题。
我们不需要使用数组。我们遍历每个节点的几何图形并创建多边形。我们将多边形存储在polygontable中。(注意:不要忘记需要关闭多边形,所以在执行查询之前,必须将第一个节点再次添加为boundarytable中的最后一个节点。否则会出现错误):
SELECT ST_MakePolygon(ST_MakeLine(bt.geom)) AS geomboundary
INTO TABLE polygontable
FROM boundarytable AS bt
GROUP BY bt.dummy -- (just a constant value to round up all bt.geom)
然后我们可以执行stu Contains查询
SELECT *, ST_Contains((SELECT geomboundary FROM polygontable), anytable.geom)
关于postgresql - Postgis和Postgres:如何使用几何数组执行ST_Contains查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29185426/