あるテーブルのポリゴンを別のテーブルのポリゴンでクリップすると、ST_Intersectionは、ST_Dumpで処理できる結果のセットを返すことができます。返される複数のジオメトリは、必ずしもST_Polygonではなく、ST_LineString(おそらくポイント)でもあります。したがって、クエリを実行すると
INSERT INTO c (geom)
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom));
テーブル "c"にクリップされたポリゴンを入力しようとすると、次のエラーで失敗します:ジオメトリタイプ(LineString)が列タイプ(ポリゴン)と一致しません
別のネストされたSELECTステートメントを実行して、ポリゴンジオメトリのみが通過するようにしました。
INSERT INTO c (geom)
(SELECT geom FROM
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom))) AS cl
WHERE ST_GeometryType(cl.geom)='ST_Polygon');
これは少し面倒なので、無効なジオメトリを削除するためのよりエレガントなソリューションがあるかどうか疑問に思いますか?
ところで、私はコードブロックの前に<!-言語:lang-sql->を置きましたが、まだハイライティングはありません。初心者のためのヒントはありますか?
—
RobertŠpendl2014年
コードをフォーマットするには、単純に貼り付けて選択し
—
PolyGeo
{}、質問編集ウィンドウの上にある[コードサンプル]ボタンを使用します。
ええ、私はそうしました、コードは「コード」としてマークされていますが、キーワードはまだ色付けされていません。
—
RobertŠpendl2014年
私は通常、ここでSQLコードを美化しようとはしませんが、meta.stackexchange.com / questions / 90521 /…で役立つように見えるメタ投稿を見つけました-「コメントとコードの間に空白行」を残しましたか?
—
PolyGeo
2つのジオメトリの交差により、あらゆるタイプのジオメトリが生成される可能性があるため、現在の解決策が最も直接的であると思います。
—
マイクT