回答:
テーブルを自動結合すると、重複する行を見つけることができます。そのような何かがうまくいくはずです:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
ポイントなら:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(未検証 .....)
最も簡単なのは、複製を入れないことです。ジオメトリフィールドに一意の制約を追加します。それがスペーシャルライトでどのように機能するかはわかりませんが、PostGISでは、ポイントの場合に必要な効果をダイビングするバウンディングボックスを比較します。
削除する重複のどれが問題ではない場合は、異なるジオメトリを選択するサブクエリで見つからないIDを持つすべての行を削除するクエリを作成できます。ここでも同じです。ポイントは安全ですが、実際のジオメトリではなくbboxのみが比較されるため(postgisと同じように機能する場合)、他のタイプは安全です。
/ニクラス
私の場合、最も効率的な方法は、レイヤーの空間インデックスを使用することです。このクエリでは、重複するフィーチャごとに1つのジオメトリのみを保持します。TINをラインストリングに変換してテストを行いました。
delete from tin_line_sp where ogc_fid not in (
select min(s1.rowid) as id_to_keep from
idx_tin_line_sp_geometry as s1,
idx_tin_line_sp_geometry as s2
where
s1.xmin = s2.xmin and
s1.xmax = s2.xmax and
s1.ymin = s2.ymin and
s1.ymax = s2.ymax
group by s1.xmin,s1.xmax,s1.ymin,s1.ymax)
空間インデックスを正しく理解するために、空間インデックスをポリゴンに変換する2つのクエリを次に示します。
create table tin_line_sp_representation as
select PolygonFromText('POLYGON(('||
xmin || ' ' || ymin || ',' ||
xmax || ' ' || ymin || ',' ||
xmax || ' ' || ymax || ',' ||
xmin || ' ' || ymax || ',' ||
xmin || ' ' || ymin || '))',25832) as geometry
from idx_tin_line_sp_geometry;
成功したら、ジオメトリカラムを復元して、お気に入りのビューアに視覚化できるようにします。
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )