Risposte:
Unire automaticamente la tabella consentirebbe di trovare righe duplicate. Qualcosa del genere dovrebbe funzionare:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
se punti:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(non testato .....)
Penso che il più semplice sia non permettere mai al duplicato di entrare. Aggiungere un vincolo unico nel campo della geometria. Non so come funzionerà in spatiallite ma in postgis il costrutto confronterebbe le scatole di delimitazione che immergeranno l'effetto desiderato nel caso di punti.
se non importa quale dei duplicati rimuovere, è possibile creare una query che elimina tutte le righe con ID che non si trova in una sottoquery che seleziona le geometrie distinte. lo stesso qui, sicuro con i punti ma non altri tipi poiché solo la bbox verrà confrontata non con la geometria effettiva (se funziona allo stesso modo dei postgis).
/ Nicklas
DELETE FROM foo
WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
FROM foo
GROUP BY geometry)
(tratto dalla risposta di Denis Valeev qui: /programming/3777633/delete-duplicate-rows-dont-delete-all-duplicate )
Nel mio caso il modo più efficiente è usare l'indice spaziale dal livello. Con questa query, mantengo solo 1 geometria per ogni funzione sovrapposta. Ho fatto il test con una TIN convertita in 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)
Per comprendere correttamente gli indici spaziali, qui due query per convertire l'indice spaziale in poligoni.
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;
In caso di successo, ripristina la colonna Geometria per poter visualizzare nel tuo visualizzatore preferito:
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )