Réponses:
Rejoindre automatiquement le tableau vous permettrait de trouver des lignes en double. Quelque chose comme ça devrait fonctionner:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
si points:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(pas testé .....)
Je pense que le plus simple est de ne jamais laisser le doublon entrer. Ajouter une contrainte unique sur le champ géométrique. Je ne sais pas comment cela fonctionnera dans la spatiallite mais en postgis la constrint comparerait les boîtes englobantes qui plongeront l'effet voulu dans le cas des points.
si le doublon à supprimer n'a pas d'importance, vous pouvez créer une requête qui supprime toutes les lignes dont l'ID ne se trouve pas dans une sous-requête qui sélectionne les géométries distinctes. Même chose ici, en sécurité avec des points mais pas avec d'autres types car seule la bbox sera comparée et non la géométrie réelle (si elle fonctionne de la même manière que les postgis).
/ Nicklas
DELETE FROM foo
WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
FROM foo
GROUP BY geometry)
(extrait de la réponse de Denis Valeev ici: /programming/3777633/delete-duplicate-rows-dont-delete-all-duplicate )
Dans mon cas, le moyen le plus efficace consiste à utiliser l'index spatial de la couche. Avec cette requête, je ne conserve qu'une seule géométrie pour chaque entité qui se chevauchent. J'ai fait le test avec un TIN converti en 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)
Pour comprendre correctement les index spatiaux, voici deux requêtes pour convertir l'index spatial en polygones.
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;
En cas de succès, récupérez la colonne de géométrie pour pouvoir visualiser dans votre visionneuse préférée:
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )