postgis去除同一个表中的面与面压盖
时间: 2024-02-28 08:54:10 浏览: 19
要去除同一个表中的面与面之间的压盖,可以使用PostGIS中的ST_Union和ST_Difference函数。
首先,使用ST_Union将所有重叠的面合并为一个单独的面。例如,如果有两个重叠的面A和B,则可以使用以下查询将其合并为一个单独的面C:
```
SELECT ST_Union(A.geom, B.geom) AS geom
FROM tableA A, tableA B
WHERE A.id <> B.id AND ST_Intersects(A.geom, B.geom);
```
接下来,使用ST_Difference函数从原始面中减去合并的面。例如,如果要从原始面A中减去合并的面C,则可以使用以下查询:
```
SELECT ST_Difference(A.geom, C.geom) AS geom
FROM tableA A, (
SELECT ST_Union(A.geom, B.geom) AS geom
FROM tableA A, tableA B
WHERE A.id <> B.id AND ST_Intersects(A.geom, B.geom)
) C
WHERE A.id = [id of original polygon];
```
这将生成一个新的几何图形,其中不再有A和B之间的重叠部分。需要注意的是,如果有多个重叠的面,则需要多次使用ST_Difference函数,每次减去一个合并的面。同时,需要指定要减去的原始面的id。
相关问题
写一个postgis的sql语句样例,实现用postgis处理同一个表里的面与面压盖问题
假设我们有一个名为"polygon_table"的表,其中包含一个名为"geom"的geometry列,表示多边形。要处理这个表中的面与面压盖问题,可以使用以下PostGIS SQL语句:
```
SELECT ST_Intersection(a.geom, b.geom) AS intersection
FROM polygon_table a, polygon_table b
WHERE a.id <> b.id AND ST_Intersects(a.geom, b.geom);
```
这个SQL语句使用了PostGIS的ST_Intersects函数来判断两个多边形是否相交,然后使用ST_Intersection函数计算它们的交集。其中的"a.id <> b.id"条件确保我们不会比较同一个多边形的自交。
注意,这个SQL语句只计算了两个多边形的交集,如果需要计算多个多边形的压盖关系,需要进行更复杂的查询。
postgis去除面与面压盖
要去除面与面之间的压盖,可以使用PostGIS中的ST_Union和ST_Difference函数。
首先,使用ST_Union将所有重叠的面合并为一个单独的面。例如,如果有两个重叠的面A和B,则可以使用以下查询将其合并为一个单独的面C:
```
SELECT ST_Union(A.geom, B.geom) AS geom
FROM tableA A, tableB B
WHERE ST_Intersects(A.geom, B.geom);
```
接下来,使用ST_Difference函数从合并的面中减去原始面。例如,如果要从合并的面C中减去原始面A,则可以使用以下查询:
```
SELECT ST_Difference(C.geom, A.geom) AS geom
FROM tableA A, (
SELECT ST_Union(A.geom, B.geom) AS geom
FROM tableA A, tableB B
WHERE ST_Intersects(A.geom, B.geom)
) C
WHERE ST_Intersects(C.geom, A.geom);
```
这将生成一个新的几何图形,其中不再有A和B之间的重叠部分。需要注意的是,如果有多个重叠的面,则需要多次使用ST_Difference函数,每次减去一个原始面。