【发布时间】:2015-01-08 02:12:09
【问题描述】:
问题: 我有一张满是多边形的桌子(一个国家的地区)。其中一些多边形具有特定的属性,可能会或可能不会检查。在这种情况下,该属性称为“spread”,“checked”值为 1。
现在我想运行一个查找所有“已检查”多边形的查询。 比如:
SELECT * FROM gemstat WHERE spread = 1
然后我想在每个尚未检查的相邻多边形中将“spread”属性设置为“1”。 (我还想设置第二个属性,但这只是一个小补充)
首先,让我们从一个查询开始,该查询选择与一个spread-value = 1 的多边形相邻的所有多边形
SELECT (b."GEM_NR")
FROM gemstat_simple5 as a
JOIN gemstat_simple5 as b
ON ST_Touches((a.the_geom),b.the_geom)
where a.spread =1;
此查询返回所有与spread = 1 的多边形相邻的多边形
现在我想根据该子查询的结果更新表。 这是通过 John Powell aka Barca 提供的这段代码实现的(请参阅下面的答案和 cmets):
Update gemstat_simple5 gem set spread=1, time=2
FROM (
SELECT (b."GEM_NR")
FROM gemstat_simple5 as a,
gemstat_simple5 as b
WHERE ST_Touches(a.the_geom, b.the_geom)
AND a."GEM_NR" != b."GEM_NR"
AND a.spread = 1
) as subquery
WHERE gem."GEM_NR" = subquery."GEM_NR"
运行此查询,它将设置相邻多边形的属性 spread 为 1 和 time 为 2,同时不接触 spread = 1 的原始多边形。 因此,它完美地回答了我的问题。
【问题讨论】:
标签: postgresql gis postgis