我有2个从shapefile生成的表。一张桌子有土地区域,另一张桌子有水域。如何在第一个表中减去第二个表的水域。
像这样的东西
UPDATE table1
SET table1.geom AS table1.geom-table2.geom
使用QGIS GEO Processing Difference可以轻松完成。
答案 0 :(得分:3)
如果您可以加入表格,请使用Tommaso Di Bucchianico的回答。这是最有效的查询。
如果您无法加入表格(这是GIS表格的常见情况),请使用 ST_Intersects 与 ST_Difference :
UPDATE table1
SET table1.geom = ST_Difference(table1.geom, table2.geom)
FROM table2
WHERE ST_Intersects(table1.geom, table2.geom);
如果table1.geom
类型为MultiPolygon,请使用ST_Multi:
UPDATE table1
SET table1.geom = ST_Multi(ST_Difference(table1.geom, table2.geom))
FROM table2
WHERE ST_Intersects(table1.geom, table2.geom);
答案 1 :(得分:1)
使用功能ST_Difference()。我认为,您还需要一个列作为连接两个表的外键,例如id列:
UPDATE table1
SET table1.geom = ST_Difference(table1.geom, table2.geom)
FROM table2 WHERE table1.id = table2.id;