我正在尝试计算每个多边形中满足特定条件的点的比例。我知道总共有多少个观测值满足条件,并且我想知道它们如何分布在多边形之间。但是,我正在执行的请求返回的总数大于我应有的总数。
为此,我首先要有一张列出所有要点的表格和一列指出是否满足条件的列(表2)。
我还有一个包含所有多边形的表(表1)。
两个表的几何形状相同(3798)。
然后我使用st_instersects(geom1,geom1)和count()来了解每个多边形中有多少个点。
我也尝试过st_within,但同样的问题也会发生。
SELECT table1.id, table1.name, count(table2.id) AS condition_met, table1.geom INTO newtable
FROM table1, table2
WHERE st_within(table1.geom, table2.geom) AND (table2.var = 4 OR table2.var = 5)
GROUP BY table1.id, table1.name, table1.geom;
所有请求均有效,但是。对于每个满足条件的点的多边形,我都有很多观察结果。但是,当我仔细检查大量观察结果时,观察到的结果太多了。
这是我用来汇总表1(多边形)中观测值总数的请求:
SELECT SUM(condition_met) FROM table2.
我以为有重复但是没有找到。
我敢肯定这是一个简单的错误,但由于我是Postgis的新手,所以我找不到它。非常感谢您的帮助!
答案 0 :(得分:0)
我认为您要查询的查询会测试多边形是否在该点内-您需要反转参数或使用st_contains。我将这样编写查询:
SELECT table1.id, table1.name, count(table2.id) AS condition_met INTO newtable
FROM table1
INNER JOIN table2 ON st_contains(table1.geom, table2.geom) -- I prefer join syntax
WHERE table2.var IN (4 ,5) -- IN is clearer
GROUP BY table1.id, table1.name; -- leave out geom in the group by as it's slow
如果仍然得到意想不到的结果,则多边形可能会像@JGH所指出的那样重叠,因此您会重复计算一些交点。尽管可以检查here进行更复杂的查询和讨论,但您可以使用类似的查询进行测试:
SELECT a.id, b.id FROM
table1 a
INNER JOIN
table1 b -- join to the same table
ON
ST_Overlaps(a.geom, b.geom) OR ST_Contains(a.geom, b.geom)
WHERE a.id <> b.id
如果该查询返回任何内容,则某些多边形会重叠。