ST_intersect
相対トポロジに応じて、いくつかのジオメトリタイプを返します。
たとえば、ST_intersect
を実行します 隣接する2つのポリゴンで、共有境界の共通部分を返します。
(たとえば、pgadminで確認できるように)単一のテーブルを出力しますが、QGISのブラウザスウォッチでは、異なるジオメトリタイプ(たとえば、POLYGON、MULTIPOLY、LINE、およびPOINT)の複数のテーブルとして表示されますが(やや紛らわしい)同じ名前。
視覚的には、左側の付随するアイコンを観察することで、それらを区別することができます:
ただし、たとえばST_Dimension
を使用してWHEREフィルタを追加することにより、必要なジオメトリのタイプを選択できます。 :
SELECT a.*,
b.*,
st_intersection(a.geom, b.geom) as geom
FROM a,b
WHERE st_intersects(a.geom, b.geom)
AND ST_Dimension(st_intersects(a.geom, b.geom)) = 2;
または、パフォーマンスのために、次のような方法で書き直します。
SELECT clipped.*
FROM (
SELECT a.id, b."fieldName",
(ST_Dump(ST_Intersection(a.geom, b.geom))).geom AS geom
FROM "public"."table_A_name" AS a INNER JOIN "public"."table_B_name" AS b
ON ST_Intersects(a.geom, b.geom)
) AS clipped
WHERE ST_Dimension("clipped"."geom") = 2;
後者のソリューションは、ST_Intersection
を許可する匿名の一時テーブルを作成します 一度だけ実行します。
トリックがST_Dimension("clipped"."geom") = 2
にあることに気づいたかもしれません。 。
ST_Dimensions
ST_Intersection
からの出力をフィルタリングします ポリゴン(トポロジの次元が2)のみを保持するようにします。