【发布时间】:2021-02-16 16:51:00
【问题描述】:
我有一个 ID 列表(多边形)和一个表(即表 zones)我有这些 ID 的所有可能排列。在另一个表中(即 zonesid)我有它们对应的几何图形 [geometry(MultiPolygon,4326)]。
table zones:
index | zone1 | zone2
-------+--------+--------
0 | 100 | 100
1 | 100 | 101
2 | 100 | 102
3 | 101 | 100
4 | 101 | 101
5 | 101 | 102
6 | 102 | 100
7 | 102 | 101
8 | 102 | 102
table zonesid:
index | zone_id | geom
-------+--------+--------
0 | 100 | geom100
1 | 101 | geom101
2 | 102 | geom102
现在我需要找出相邻的区域并在这对旁边写一个 1。
我已经阅读了Finding neighbouring polygons - postgis query 的问题,我认为我需要类似的东西,即使在这种情况下我需要让它指示确切的对。
在上面的例子中,假设只有 100 和 102 是相邻的。应该是:
table zones:
index | zone1 | zone2 | adiacent
-------+--------+---------+--------
0 | 100 | 100 | 0
1 | 100 | 101 | 0
2 | 100 | 102 | 1
3 | 101 | 100 | 0
4 | 101 | 101 | 0
5 | 101 | 102 | 0
6 | 102 | 100 | 1
7 | 102 | 101 | 0
8 | 102 | 102 | 0
我已经开始了:
ALTER TABLE zones
ADD COLUMN adjacent bigint;
UPDATE zones set adjacent=1, time=2
FROM (
SELECT (*)
FROM zonesid as a,
zonesid as b,
zones as c,
zones as d
WHERE ST_Touches(a.geom, b.geom)
AND c.zone1 != d.zone2
) as subquery
WHERE c.zone1 = subquery.zoneid
但是...我正在努力了解如何正确引用表 zoneid 来比较这些对,然后得到它们。
【问题讨论】:
标签: postgresql gis postgis