QGIS를 사용하여 필드에서 중복 속성을 식별합니까?


27

수천 개의 점이있는 점 모양 파일이 있습니다. 고유해야하는 ID 코드 필드가 있습니다. 그때마다 데이터 입력 담당자가 ID를 복제본을 잘못 입력합니다. 지금은 수동으로 필드를 스크롤하여 중복 항목을 찾습니다.

검색 쿼리 작성기를 사용하여이 작업을 수행하는 다른 방법이 있습니까?


5
고유성을 적용해야하는 경우 Postgres / PostGIS, Spatailite
Nathan W

비슷한 문제가 있습니다. 특정 종이 발생하는 UTM 사각형을 포함하는 하나의 큰 shapefile이 있습니다 (1 평방에서 최대 5 개, 대부분 2 개). 그러나 나는 그것들이 정확히 겹치기 때문에지도에서 모두 시각화하는 데 문제가 있습니다. 혼합 옵션이 끔찍해 보입니다. 전 : 내 해결 광장 UTM의 종의 양을 따라 동일한 부분의 폴리곤을 분할하는 것입니다 평방 쇼 1 컬러하지만 두 종의 발생이 때문에 표시해야합니다 : [광장 쇼 1 개 색상 만이 표시되어야하기 전에! (] i.stack.imgur.com/6WqKn.jpg ) 이후 : 정사각형 분할
Hannes Ledegen

마지막에 여기에 질문을 올리는 대신 새 질문을 열어야한다고 생각합니다.
Jens

답변:


7

ID가 연속적이면 @ Ship.shp가 제안한 고유 한 값으로 새 임시 열을 추가 한 다음 쿼리 작성기를 사용하여 ID! = uniqueID를 검색합니다.

복제본을 직접 반환합니다. 원래 ID를 수정 한 후 추가 열을 제거하거나 필요에 따라 전체 프로세스를 반복하십시오. ID와 어떤 패턴이 일치해야하는지 명확하지 않습니다. 고유해야하는 경우에는 마지막 값을 먼저 기록한 다음 한 번의 반복으로 잘못된 ID를 편집하여 원하는만큼 숫자를 부딪 칠 수 있습니다.


18

중복 속성을 감지하는 또 다른 그래픽, 동적 및 가장 중요한 간단한 방법 : QGIS의 표현식 빌더를 사용하십시오.

속성 테이블에서 중복을 강조 표시하십시오 .

다음 조건에서 조건부 서식을 활성화하십시오 (아래 빨간색 화살표 참조).

count("FieldWithDuplicates","FieldWithDuplicates") > 1

상단에 모든 중복 항목을 그룹화하려면 열을 마우스 오른쪽 버튼으로 클릭하고 정렬을
선택합니다. 위의 표현식을없이 입력하고 >1오름차순 정렬을 선택 취소하십시오.

QGIS 속성 테이블에 강조 표시된 중복 속성

캔버스에서 속성이 중복 된 피쳐를 강조 표시합니다 .

필터를 위의 조건으로 설정하여 새 기호 나 레이블을 추가 할 수 있습니다.

물론이를 기반으로 데이터 파생 재정의를 활성화 할 수 있습니다.

예를 들어 속성이 중복 된 피쳐의 레이블을 강조 표시하려면 다음 재정의를 사용하여 레이블 배경 (= 1)을 그리도록 설정할 수 있습니다.

CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END

다음과 같은 것을 달성하기 위해

QGIS 캔버스에서 강조 표시된 중복 속성 레이블

물론 두 가지 상황에서 복제 속성을 삭제하거나 변경하면 서식 / 스타일이 즉시 업데이트됩니다.


1
이것은 지금까지 가장 합법적 인 답변입니다. 방금 표준 쿼리 도구와 함께 표현식을 직접 사용할 수 있다고 덧붙이고 싶었습니다.
maxwhere

@maxwhere, 레이어를 필터링하는 데 사용되는 쿼리 작성기에서 의미합니까? Q 3.4 또는 3.8의 결과를 실제로 필터링하지는 못하지만 Q 2.x에서와 같은 오류가 발생하지 않는다는 것에 놀랐습니다.
she_weeds

14

그룹 통계 플러그인을 사용하고 ID를 필드 분류로 설정하십시오. 'count'열에 각 값이 몇 번 입력되었는지 확인할 수 있습니다.


13

이를 수행하는 빠른 방법 (단순하지는 않지만)은 레이어 속성으로 이동하여 관심있는 열을 사용하여 스타일-분류를 선택하는 것입니다.이를 적용한 다음 레이어 창에서 해당 레이어를 마우스 오른쪽 버튼으로 클릭하고 기능 수 표시를 확인하십시오. 확인란. 그런 다음 레이어 창에서 레이어를 확장하면 각 값을 몇 번 입력했는지 즉시 확인할 수 있습니다.


11

이것은 내가 방금 비틀었던 좋은 질문이다. 나는 지금까지 주어진 답변을 좋아하지 않습니다. 순차가 아닌 정수가 아닌 고유 ID를 가진 유효한 데이터 세트가 있습니다. 문제는 데이터 세트에 단일 지오메트리가 포함되지만 일부 경계는 다중 지오메트리라는 점입니다. 내 임무는 이러한 형상을 식별하고 통합하는 것입니다.

이런 종류의 작업에는 DB 관리자와 SQL을 사용하는 것이 좋습니다. DB 관리자는 이제 QGIS의 일부입니다. 데이터를 PostGIS 또는 SpatiaLite 데이터 세트로 내 보내야합니다. SpatiaLite는 파일 기반의 데이터 형식이어야합니다.

이제 count (), group by 및 order by를 원하는대로 사용할 수 있으며이 문제와 다른 문제를보다 빨리 해결할 수 있습니다.

여기에 이미지 설명을 입력하십시오


1
SQL 플러그인을 사용하는 것이 가장 좋습니다.
Devdatta Tengshe

잘 작동합니다. 다른 속성 열에서 최소 / 최대 값으로 기능을 복제본에서 선택하는 방법은 무엇입니까? 나는 그것을 알아낼 수 없었다. 도와 주실 래요?
christian.gobel

잘 모르겠습니다. 범위 (최소 / 최대 사이)가 레코드가 복제인지 여부를 정의합니까?
Dennis Bauszus

4

그래 비슷한 문제로 벽에 머리를 부딪쳤다.

다음은 동일한 ID를 가진 기능을 제거하는 스크립트입니다. 둘 이상의 인덱스 속성이있는 첫 번째 기능을 사용하여 새 기능 클래스에 씁니다.

#Definition of inputs and outputs
# Written by: Gregor Skrt 
#==================================
##[Example scripts]=group
##input=vector
##unique_field=field input
##output=output vector

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from processing.core.VectorWriter import VectorWriter

# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = processing.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
writer = VectorWriter(output, None, fields, provider.geometryType(), layer.crs() )

inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
values = {}

value_field_index = layer.fieldNameIndex(unique_field)

feats = processing.getfeatures(layer)
nFeat = len(feats)

for inFeat in feats:
    progress.setPercentage(int((100 * nElement)/nFeat))
    nElement += 1
    inGeom = inFeat.geometry()
    attrs = inFeat.attributes()
    value = attrs[value_field_index]

    if value not in values:
    #to ne vem ce bo drzalo ???
        values[value]=[]
    outFeat.setGeometry(inGeom)
    outFeat.setAttributes(attrs)
    writer.addFeature(outFeat)
del writer

2

또한 split by 속성을 사용하고 각 값에 대해 별도의 테이블로 끝날 수 있습니다.

그래도 Rayo의 제안이 마음에 듭니다. 내가 생각했던 것처럼 통계학자를 제외하고는 제대로 작동하지 않습니다.
고유 값의 수를 제공하지만 해당 값이 무엇인지 도움이되지 않습니다.
다른 소프트웨어가 카운트 필드를 추가하여 CSV 또는 다른 스프레드 시트 형식으로 내보낼 수 있습니다.

통계
속성 별 분할 레이어에 대한 제안은 벡터 관리 도구에 있습니다.
관리도

스플릿
당신이 계산 할 수있는 1 필드에 데이터를 분할합니다.
ship.ship의 솔루션보다 더 우아하지 않은 방법


2
당신이 좋아하는 답변을 찬성하는 것을 고려하십시오!
whuber

3
자체 공감은 허용되지 않습니다!
브래드 네섬
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.