Jawaban:
Bergabung secara otomatis dengan tabel akan memungkinkan Anda menemukan duplikat baris. Sesuatu seperti itu seharusnya bekerja:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
jika poin:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(tidak diuji .....)
Saya pikir yang termudah adalah tidak pernah membiarkan duplikat masuk. Tambahkan kendala unik pada bidang geometri. Saya tidak tahu bagaimana itu akan bekerja dalam spatiallite tetapi dalam postgis konstrint akan membandingkan kotak pembatas yang akan menyelam efek yang diinginkan dalam kasus poin.
jika tidak masalah yang mana dari duplikat untuk menghapus Anda bisa membangun kueri yang menghapus semua baris dengan id yang tidak ditemukan dalam subquery yang memilih geometri yang berbeda. sama di sini, aman dengan poin tetapi bukan tipe lain karena hanya bbox yang akan dibandingkan bukan geometri yang sebenarnya (jika bekerja dengan cara yang sama dengan postgis).
/ Nicklas
DELETE FROM foo
WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
FROM foo
GROUP BY geometry)
(diambil dari jawaban Denis Valeev di sini: /programming/3777633/delete-duplicate-rows-dont-delete-all-duplicate )
Dalam kasus saya, cara yang paling efisien adalah dengan menggunakan indeks spasial dari layer. Dengan kueri ini, saya hanya menyimpan 1 geometri untuk setiap fitur yang tumpang tindih. Saya telah melakukan tes dengan TIN yang diubah menjadi Linestring.
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)
Untuk memahami indeks spasial dengan benar, berikut ini dua kueri untuk mengubah indeks spasial menjadi poligon.
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;
Jika berhasil, pulihkan kolom geometri untuk dapat divisualisasikan ke pemirsa favorit Anda:
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )