Câu trả lời:
Tự động tham gia bảng sẽ cho phép bạn tìm các hàng trùng lặp. Một cái gì đó như thế sẽ làm việc:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom
nếu điểm:
DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y
(không được kiểm tra .....)
Tôi nghĩ cách dễ nhất là không bao giờ để trùng lặp. Thêm một ràng buộc duy nhất trên trường hình học. Tôi không biết làm thế nào nó sẽ hoạt động trong spatiallite nhưng trong postgis, bản in sẽ so sánh các hộp giới hạn sẽ làm tăng hiệu ứng mong muốn trong trường hợp điểm.
nếu không loại bỏ một trong những bản sao cần loại bỏ, bạn có thể tạo một truy vấn xóa tất cả các hàng có id không tìm thấy trong truy vấn con chọn hình học riêng biệt. tương tự ở đây, an toàn với các điểm nhưng không phải các loại khác vì chỉ có bbox sẽ được so sánh không phải là hình học thực tế (nếu hoạt động theo cách tương tự như postgis).
/ Nicklas
DELETE FROM foo
WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
FROM foo
GROUP BY geometry)
(lấy từ câu trả lời của Denis Valeev đây: /programming/3777633/delete-duplicate-rows-dont-delete-all-duplicate )
Trong trường hợp của tôi, cách hiệu quả nhất là sử dụng chỉ số không gian từ lớp. Với truy vấn này, tôi chỉ giữ 1 hình cho mỗi tính năng chồng chéo. Tôi đã thực hiện bài kiểm tra với một TIN được chuyển đổi thành 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)
Để hiểu chính xác các chỉ mục không gian, ở đây có hai truy vấn để chuyển đổi chỉ mục không gian thành đa giác.
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;
Khi thành công, khôi phục cột hình học để có thể hình dung thành trình xem yêu thích của bạn:
select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )