如何从PostGIS表中删除几何数据

时间:2016-04-04 06:05:07

标签: postgis postgresql-9.1 shapefile

我有2个从shapefile生成的表。一张桌子有土地区域,另一张桌子有水域。如何在第一个表中减去第二个表的水域。

像这样的东西

UPDATE table1 
   SET table1.geom AS table1.geom-table2.geom

使用QGIS GEO Processing Difference可以轻松完成。

2 个答案:

答案 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;