수천 개의 점이있는 점 모양 파일이 있습니다. 고유해야하는 ID 코드 필드가 있습니다. 그때마다 데이터 입력 담당자가 ID를 복제본을 잘못 입력합니다. 지금은 수동으로 필드를 스크롤하여 중복 항목을 찾습니다.
검색 쿼리 작성기를 사용하여이 작업을 수행하는 다른 방법이 있습니까?
수천 개의 점이있는 점 모양 파일이 있습니다. 고유해야하는 ID 코드 필드가 있습니다. 그때마다 데이터 입력 담당자가 ID를 복제본을 잘못 입력합니다. 지금은 수동으로 필드를 스크롤하여 중복 항목을 찾습니다.
검색 쿼리 작성기를 사용하여이 작업을 수행하는 다른 방법이 있습니까?
답변:
ID가 연속적이면 @ Ship.shp가 제안한 고유 한 값으로 새 임시 열을 추가 한 다음 쿼리 작성기를 사용하여 ID! = uniqueID를 검색합니다.
복제본을 직접 반환합니다. 원래 ID를 수정 한 후 추가 열을 제거하거나 필요에 따라 전체 프로세스를 반복하십시오. ID와 어떤 패턴이 일치해야하는지 명확하지 않습니다. 고유해야하는 경우에는 마지막 값을 먼저 기록한 다음 한 번의 반복으로 잘못된 ID를 편집하여 원하는만큼 숫자를 부딪 칠 수 있습니다.
중복 속성을 감지하는 또 다른 그래픽, 동적 및 가장 중요한 간단한 방법 : QGIS의 표현식 빌더를 사용하십시오.
속성 테이블에서 중복을 강조 표시하십시오 .
다음 조건에서 조건부 서식을 활성화하십시오 (아래 빨간색 화살표 참조).
count("FieldWithDuplicates","FieldWithDuplicates") > 1
상단에 모든 중복 항목을 그룹화하려면 열을 마우스 오른쪽 버튼으로 클릭하고 정렬을
선택합니다. 위의 표현식을없이 입력하고 >1
오름차순 정렬을 선택 취소하십시오.
캔버스에서 속성이 중복 된 피쳐를 강조 표시합니다 .
필터를 위의 조건으로 설정하여 새 기호 나 레이블을 추가 할 수 있습니다.
물론이를 기반으로 데이터 파생 재정의를 활성화 할 수 있습니다.
예를 들어 속성이 중복 된 피쳐의 레이블을 강조 표시하려면 다음 재정의를 사용하여 레이블 배경 (= 1)을 그리도록 설정할 수 있습니다.
CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END
다음과 같은 것을 달성하기 위해
물론 두 가지 상황에서 복제 속성을 삭제하거나 변경하면 서식 / 스타일이 즉시 업데이트됩니다.
이것은 내가 방금 비틀었던 좋은 질문이다. 나는 지금까지 주어진 답변을 좋아하지 않습니다. 순차가 아닌 정수가 아닌 고유 ID를 가진 유효한 데이터 세트가 있습니다. 문제는 데이터 세트에 단일 지오메트리가 포함되지만 일부 경계는 다중 지오메트리라는 점입니다. 내 임무는 이러한 형상을 식별하고 통합하는 것입니다.
이런 종류의 작업에는 DB 관리자와 SQL을 사용하는 것이 좋습니다. DB 관리자는 이제 QGIS의 일부입니다. 데이터를 PostGIS 또는 SpatiaLite 데이터 세트로 내 보내야합니다. SpatiaLite는 파일 기반의 데이터 형식이어야합니다.
이제 count (), group by 및 order by를 원하는대로 사용할 수 있으며이 문제와 다른 문제를보다 빨리 해결할 수 있습니다.
그래 비슷한 문제로 벽에 머리를 부딪쳤다.
다음은 동일한 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
또한 split by 속성을 사용하고 각 값에 대해 별도의 테이블로 끝날 수 있습니다.
그래도 Rayo의 제안이 마음에 듭니다. 내가 생각했던 것처럼 통계학자를 제외하고는 제대로 작동하지 않습니다.
고유 값의 수를 제공하지만 해당 값이 무엇인지 도움이되지 않습니다.
다른 소프트웨어가 카운트 필드를 추가하여 CSV 또는 다른 스프레드 시트 형식으로 내보낼 수 있습니다.
속성 별 분할 레이어에 대한 제안은 벡터 관리 도구에 있습니다.
당신이 계산 할 수있는 1 필드에 데이터를 분할합니다.
ship.ship의 솔루션보다 더 우아하지 않은 방법