Spatialite에서 중복 제거


9

포인트가있는 Spatialite 데이터베이스가 있습니다. 때때로 포인트가 추가됩니다. 좌표를 기준으로 중복을 제거하는 가장 쉬운 방법은 무엇입니까?

답변:


7

테이블에 자동 조인하면 중복 행을 찾을 수 있습니다. 그와 같은 것이 작동해야합니다.

DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom

포인트가 :

DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y

(검증되지 않은 .....)


2
감사합니다. 올바른 방향으로 안내해주었습니다. 다음과 같이 해결했습니다. mytable2에서 삭제 geom IN (SELECT geom FROM mytable1);
johannes

8

가장 쉬운 방법은 복제물을 절대로 넣지 않는 것입니다. 지오메트리 필드에 고유 제한 조건을 추가하십시오. 공간 공간에서 어떻게 작동하는지 모르겠지만 포스트 지에서는 컨 스트 린트가 경계 상자를 비교하여 포인트의 경우 원하는 효과를 다이빙합니다.

중복 중 하나를 제거하는 것이 중요하지 않으면 하위 쿼리에서 찾을 수없는 id로 모든 행을 삭제하는 쿼리를 작성하여 고유 한 기하학을 선택할 수 있습니다. bbox 만 실제 지오메트리와 비교되지 않기 때문에 포인트와 안전하지만 다른 유형은 안전하지 않습니다 (postgis와 동일한 방식으로 작동하는 경우).

/ 니클라스


귀하의 답변에 감사드립니다, 나는 제약이있는 아이디어를 좋아합니다.
johannes

0
DELETE FROM foo
   WHERE pkuid NOT IN (SELECT min(pkuid) --or max(pkuid)
                    FROM foo
                    GROUP BY geometry)

( Dennis Valeev 의 답변에서 가져 왔습니다 : https : //.com/questions/3777633/delete-duplicate-rows-dont-delete-all-duplicate )


0

필자의 경우 가장 효율적인 방법은 레이어에서 공간 인덱스를 사용하는 것입니다. 이 쿼리를 사용하면 겹치는 각 피쳐마다 하나의 형상 만 유지합니다. TIN을 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)

공간 인덱스를 올바르게 이해하기 위해 공간 인덱스를 다각형으로 변환하는 두 가지 쿼리가 있습니다.

    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;

성공하면 지오메트리 열을 복구하여 즐겨 찾는 뷰어로 시각화 할 수 있습니다.

    select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.