Loại bỏ các bản sao khỏi Spatialite


9

Tôi có một cơ sở dữ liệu Spatialite với các điểm. Theo thời gian bây giờ điểm được thêm vào. Điều gì sẽ là cách dễ nhất để loại bỏ trùng lặp dựa trên tọa độ?

Câu trả lời:


7

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 .....)


2
Cảm ơn a đã đưa tôi đi đúng hướng, tôi đã giải quyết nó bằng: XÓA TỪ mytable2 WHERE geom IN (CHỌN geom TỪ mytable1);
johannes

8

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


Cảm ơn câu trả lời của bạn, tôi thích ý tưởng với các ràng buộc.
johannes


0

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 )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.