레이어에서 모든 속성을 지우고 다각형을 그대로 두는 빠른 방법이 있습니까?


9

QGIS 2.6에는 여러 폴리곤이있는 Shapefile 레이어가 있으며 각 폴리곤에는 100 개가 넘는 필드에 데이터가 있습니다. 모든 동일한 다각형을 사용하여 새 레이어를 만들어야하지만 모든 데이터 필드가 비어 있습니다 (필드 유형에 따라 0, Null 또는 비어 있음으로 설정 됨). 한 번에 하나씩 각 다각형의 각 필드에서 Delete 키를 누르는 것보다 빠른 방법이 있습니까?이 방법으로 1000 번 이상 수행해야합니다.


1
제발 편집 질문은 GIS 소프트웨어 버전 및 데이터 형식을 포함합니다 (예를 들어, Shape 파일, FGDB, PostGIS와, ..)
빈스

답변:


3

데이터를 OID 및 지오메트리 외에 속성없는 레이어 X (레이어 / 셰이프 파일 / 피처 클래스 / 무엇이든)에 복사하여 붙여 넣은 다음 현재 "빈"지오메트리를 다시 복사하여 붙여 넣을 수 없습니다. 원래 레이어로?


6

QGIS에로드 된 shapefile 에 대한 모든 속성을 지우려면 Python 콘솔에 다음 코드를 입력 할 수 있습니다 NULL. 레이어 패널 (목차)에서 레이어를 선택하고 코드를 실행하십시오.

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()   
for field in layer.dataProvider().attributeIndexes():   
    for feature in layer.getFeatures(): 
        layer.changeAttributeValue(feature.id(), field, NULL)    

layer.commitChanges()        

이것은 QGIS 2.8.2에서 테스트되었습니다.


업데이트 :

@Vince에 의해 코멘트에 대응하여, 다음과 같은 코드를 직접 파이썬 콘솔에 붙여 넣기 / 복사 할 수 있습니다과에 따라 속성의 값이 변경됩니다 유형 (즉, 필드 0에 대한 정수 필드; NULL에 대한 문자열 필드를, 그리고 시대의 1900-01-01에 대한 날짜 필드) :

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()  
for field in layer.pendingFields():
        if field.typeName() == 'Integer':
                name_int = field.name()
                for feature in layer.getFeatures():
                        feature[name_int] = '0'
                        layer.updateFeature(feature)
        if field.typeName() == 'String':
                name_str = field.name()
                for feature in layer.getFeatures():
                        feature[name_str] = NULL
                        layer.updateFeature(feature)
        if field.typeName() == 'Date':
                name_dat = field.name()
                for feature in layer.getFeatures():
                        feature[name_dat] = '1900-01-01'
                        layer.updateFeature(feature)
layer.commitChanges()

1
숫자에 0을, 문자열에 공백 / NULL을, 날짜에 날짜를 할당하도록 논리를 조정할 수 있습니까?
빈스

@Vince-고마워 친구, 나는이 문제에 전문가가 아니므로 확실히 시도 할 수 있습니다 :)
Joseph

@Vince-조정에 대해 다시 한 번 감사드립니다. python =)에 대해 더 많이 알게되었습니다.
Joseph

1
1970 년 1 월 1 일 또는 2000 년이 아닌 1900 년의 시대를 생각할 때 내 나이가 보여 진다고 생각합니다.)
Vince

3

파일을 새 파일로 저장하고 "다른 이름으로 저장 ..."대화 상자에서 "속성 만들기 건너 뛰기"상자를 선택하면됩니다. 정확히 말한대로합니다.

FID라는 숫자 카운터 열이 하나 있습니다. 분명히 Shapefile 형식에는 하나 이상의 속성이 필요합니까? 가능하면 더 나은 공간적 공간 또는 지오 패키지를 사용하십시오.


+1, 최소한 하나의 속성이 있어야합니다. 그러나 이것은 필드 계산기를 실행 하고 FID의 모든 값을로 바꿀 수 있으므로 매우 훌륭하고 간단한 방법 NULL입니다.
Joseph

1
QGIS 동작이 이상하게 보입니다. FID 열은 편집 가능하며 형상과 속성 간의 실제 매핑이 아닙니다. 열을 삭제하면 편집 할 수없는 "feature id"라는 이름이 표시됩니다. 그것은 이미 첫 번째 결과가되어야합니다. QGIS 2.10. 나중에 버그를 제기 할 것입니다.
bugmenot123

2

openoffice 또는 기타로 .dbf 파일을 열고 데이터를 제거하십시오.
파이썬을 사용하여 파일을 반복하고 헤더를 제외한 모든 헤더를 제거 할 수 있습니다. dbf python 모듈을 참조하십시오.


1
dBase 파일 구성 요소에서 shapefile-ignorant 도구를 사용하면 shapefile이 손상 될 수 있습니다. 공백과 0을 채우는 것이 목적이라면 데이터를 "제거"하면 .shp / .shx보다 레코드 수가 적은 dBase 파일 만 생성됩니다.
빈스

실제로, 우리는 단순히 데이터를 제거하기 때문에 아무런 위험이 없습니다.
julsbreakdown

아니요, 작업은 다각형을 유지하고 해당 속성을 지우는 것이므로 위험이 매우 높습니다. 잠재적 인 부패에 대해 경고하지 않는 답변은 위험을 심각하게 받아들이지 않습니다.
빈스

나는 그것이 어려운 방법, 즉 규칙적인 방법은 아니지만 작동한다는 것을 알고 있습니다. 당연히 원본 데이터의 백업을 유지하는 것이 좋습니다.
Leehan

이 특별한 경우 모든 필드의 모든 속성이 초기화되므로 위험이 그리 크지 않습니다. 따라서 dbf 파일에서 레코드 순서가 변경되는 경우 모든 레코드의 속성에 동일한 데이터가 있으므로 여전히 엉망이되지 않습니다. 사용자는 여전히 .dbf의 기능 수가 .shp의 기능과 동일하도록주의해야합니다. 그러나 @Vince가 작성한 것처럼 사용자는 a) 행 순서 변경 b) .dbf의 행 수는 일반적으로 손상되어 사용할 수없는 모양 파일로 이어진다는 경고를 받아야합니다.
user30184

2

QGIS는 .dbf없이 모양 파일을 열 수 있습니다.

따라서 .dbf 구성 요소를 삭제하고 .shp를로드하면 형상 만 가져올 수 있습니다.


개인적으로 관련 파일을 삭제하지 말 것을 자제하지만 좋은 팁입니다. :)
Joseph

1
예, 이름을 바꾸는 것이 더 안전한 옵션 일 수 있습니다.
HeikkiVesanto

2

Excel에서 * .dbf 파일을 편집 할 수 있습니다.

그런 다음 기하 필드를 제외한 모든 필드를 삭제합니다.

마지막으로 저장하고 종료하십시오.

이 작업을 수행하기 전에 * .shp의 아카이브를 유지하는 것이 좋습니다.


의미는 스키마를 그대로 유지하는 것으로 보이므로 속성 값만 일부 기본값으로 설정해야합니다. Excel에서는 dbf 형식으로 저장할 수 없습니다.
user30184

2
형상 파일의 dBase 구성 요소에 형상 필드가 없습니다.
빈스

Excel로 dbf를 편집 할 때 wkt 필드가 없습니다.
Leehan

FID 필드는 .dbf의 행을 .shp에 저장된 형상에 연결합니다. 실제로 .dbf는 형상과 관련이 없습니다. en.wikipedia.org/wiki/Shapefile
mr.adam

1

QGIS 2.8.x에서는 특정 또는 모든 필드를 제거 할 수도 있습니다. 속성 테이블 열기, 편집 모드 전환, "열 삭제"버튼을 클릭하고, 원치 않는 모든 속성을 선택하고 "확인"을 클릭하십시오. 수정 사항을 저장하십시오.

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