Antworten:
Durch das automatische Verknüpfen der Tabelle können Sie doppelte Zeilen finden. So etwas sollte funktionieren:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
wenn Punkte:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(nicht getestet .....)
Ich denke, es ist am einfachsten, das Duplikat niemals einzulassen. Fügen Sie dem Geometriefeld eine eindeutige Einschränkung hinzu. Ich weiß nicht, wie das bei Spatiallit funktionieren wird, aber bei Postgis würde die Einschränkung die Begrenzungsrahmen vergleichen, die bei Punkten den gewünschten Effekt erzielen.
Wenn es keine Rolle spielt, welches der Duplikate entfernt werden soll, können Sie eine Abfrage erstellen, die alle Zeilen mit der ID löscht, die nicht in einer Unterabfrage gefunden wird, in der die verschiedenen Geometrien ausgewählt werden. das gleiche hier, sicher mit Punkten, aber nicht mit anderen Typen, da nur die bbox verglichen wird, nicht die tatsächliche Geometrie (wenn sie genauso funktioniert wie Postgis).
/ Nicklas
DELETE FROM foo
WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
FROM foo
GROUP BY geometry)
(Aus der Antwort von Denis Valeev hier: /programming/3777633/delete-duplicate-rows-dont-delete-all-duplicate )
In meinem Fall ist es am effizientesten, den räumlichen Index der Ebene zu verwenden. Bei dieser Abfrage behalte ich nur 1 Geometrie für jedes überlappende Feature. Ich habe den Test mit einer in Linestring konvertierten TIN durchgeführt.
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)
Um räumliche Indizes richtig zu verstehen, werden hier zwei Abfragen durchgeführt, um räumliche Indizes in Polygone umzuwandeln.
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;
Stellen Sie bei Erfolg die Geometriespalte wieder her, um sie in Ihrem bevorzugten Viewer zu visualisieren:
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )