정규식을 사용하여 속성 데이터를 쉽게 편집하는 방법은 무엇입니까?


30

QGIS를 사용하는 MSc 학생들을위한 튜토리얼을 작성 중입니다. 작업 중 하나는 수정되는 속성 데이터 (자습서의 PDF 초안 볼 필요 여기에 관심있는 경우).

문제는 속성 데이터를 편집하는 방법입니다. 나는이 질문이 전에 요청 되었고 대답이 간단 하다는 것을 알고 있습니다 : LibreOffice calc를 사용하여 수정 한 다음 저장하여 행 순서와 열 제목이 동일하게 유지되도록하십시오. 나는이 접근 방식을 사용하여 큰 효과를 거두었 다.

불행히도 솔루션은 더 이상 작동하지 않습니다. LibreOffice (5.4.2) 또는 OpenOffice (3.4.1) Calc에 .dbf 파일을 저장하면 QGIS 관점에서 데이터가 스크램블됩니다 (속성 테이블에는 임의의 정수만 나타남). 대신 .dbt 파일을 추가로 만듭니다.

질문에 도달하려면 다음 주 MSC 학생들에게 어떻게해야합니까? 다음 옵션을 고려했습니다.

  1. 대신 R을 사용하십시오 (나에게는 좋지만 학생들에게는 무섭습니다)
  2. 파일을 .csv로 편집 한 다음 타임 스탬프를 기준으로 조인합니다.
  3. 다른 프로그램을 사용하십시오 : 나는 Gnumeric과 Excel을 시도했지만 좋은 결과를 빨리 얻지 못했습니다.

이 질문에 답하기 위해 복제 가능한 예제를 만들었습니다 . QGIS에서 "points.shp"파일을 열고 속성 테이블을 관찰 한 다음 닫습니다. LibreOffice의 속성 테이블 "points.dbf"에서 몇 개의 셀을 편집하십시오.-저장하십시오. QGIS에서 "points.shp"를 다시 열고 스크램블 된 속성 테이블을 관찰하십시오. .zip 폴더의 다른 shapefile은 LibreOffice 및 OpenOffice에 의해 이미 손상되어 문제의 모습을 보여줍니다.

간단히 말해서이 문제를 어떻게 가장 잘 해결할 수 있습니까?


2
사이트에 오신 것을 환영합니다.이 질문은 정말 좋은 질문이며, 좋은 솔루션을 얻을 수 있기를 바랍니다. 나는이 학생들에게 약간의 파이썬이 문제가
아니라고 가정

13
셰이프 파일의 .DBF 부분을 직접 편집하는 것은 일상적인 사용을 권장하기에는 너무 위험하므로 초보자가 전혀 사용하지 않아야합니다. 그러나 유사한 특성의보다 안정적인 솔루션을 사용할 수 있습니다. 셰이프 파일에 고유 식별자 필드를 유지하십시오. 절대 편집하지 마십시오. 대신, 동일한 표에서 조인 된 속성을 관련 테이블 (GIS가 읽을 수있는 모든 형식)로 유지하십시오. 이제 식별자 필드를 보호하는 한 모양과 속성의 연결을 잃지 않고 속성 테이블을 자유롭게 편집 할 수 있습니다.
whuber

1
파이썬 솔루션은 구현하고 이해하기 쉬운 한 괜찮을 것입니다 ... 좋은 옵션 인 식별자 번호를 유지하는 것과 관련하여 (내 질문에 옵션 2) 아마도 내 기본 대답입니다. 그러나 추가 파일을 포함하지 않는 더 간단한 "빠른 수정"을 기대하고있었습니다 (모양 파일 당 5
개로

3
쉐이프 파일 당 5 개는 무엇을 의미합니까? 9를보십시오! :-) (GIS 사용 여부에 따라 색인 파일이 누적 될 수 있습니다.) 일단 일련의 데이터를 유지하기 위해 하나 이상의 관련 파일이 필요하고 모양 파일이 최소 3 개를 요구하면 실제로는 별다른 문제가되지 않습니다. 추가 파일을 넣습니다. 메타 데이터 파일도 추가 할 수 있습니다. :-) 일단 조인을 설정하면 자동으로 발생하지 않습니까? (하지만 타임 스탬프가 조인에 어떻게 사용될 수 있는지는 알 수 없습니다. 대신 버전 제어 시스템에 사용됩니다.)
whuber

3
데이터베이스에 데이터베이스를 도입하려는 경향 이 있는 경우 spatiaLite에는 OSM 데이터를위한 필드 편집 및 명령 행 도구를위한 GUI가 있습니다. 그런 다음 약간의 SQL을 포함시킬 수 있으며 학생들은 아마도 앞서 나갈 것입니다.
Scro

답변:


18

QGIS 내에서 Ryan Garnett의 조언에 따라 찾은 가장 간단한 답변 :

regexp_replace 사용

이 기능은 1 년 전에 Jürgen Fischer에 의해 필드 계산기에 추가되었습니다 ( 이 버그 보고서에 설명되어 있음 ). 이 작업을 수행하는 방법을 찾기 위해 잠시 동안 시도했지만 "qgis regex"및 기타 모호한 용어를 검색하지 못했습니다.

기능은 "이름"열의 모든 값을 표준화해야 할 때 가장 잘 설명됩니다. 예를 들어, "Tesc"패턴을 포함하는 모든 셀을 'Tesco'로 바꾸고 "Tesco, Infirmary Road"(OSM 기고자가 자주 추가하는)와 같은 불필요한 정보를 제거하면 다음 기능을 사용할 수 있습니다.

regexp_replace ( "name", 'Tesc. *', 'Tesco')

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

필자는 이전에 사용했던 grep과 약간 다르기 때문에 파이썬 정규 표현식 기능이라고 생각합니다.

이것이 작동하는 방법에 대한 더 많은 문서 ( QGIS 웹 사이트의 세부 사항 은 몇 단어로 제한됨)가 필요하다고 생각하므로 나중에 참조 할 수 있도록 다음 페이지를 북마크했습니다.

이 솔루션에는 몇 가지 장점이 있습니다.

  1. 간단 함 : 추가 프로그램이나 추가 기능이 필요하지 않습니다
  2. 학생들에게 (Pythonic?) 함수 (텍스트를 나타내는 " '"가 흥미 롭습니다. 경고 : "또는 기호가 실패하지 않음)) 및 명령 줄 함수를 사용하여 정규 표현식의 힘을 소개합니다.

내 자신의 질문에 답변 해 주셔서 감사합니다. 많은 사람들이 저를 빛으로 안내해 주셔서 감사합니다! 이 질문 스레드가 비슷한 문제에 직면 한 다른 사람들에게 교육적으로 사용될 수 있기를 바랍니다.


3
걱정하지 마십시오. 자신의 질문에 대답하는 것은 문제가되지 않습니다.
underdark

도움이 될만한 것을 발견하게되어 기쁩니다. 공유 주셔서 감사합니다, 나는 이것을 사용할 것입니다 알고 있습니다.
Ryan Garnett

1
QGIS 개발자들에게 Qt regex입니다. qt-project.org/doc/qt-4.8/qregexp.html
wildintellect

9

이것은 대학원생의 학습 목표 일 수있는 멍청한 답변 일 수 있지만 필드 계산기를 사용하여 QGIS의 속성을 편집하지 않는 이유가 있습니까? 이전 버전의 QGIS (1.7 이전)에서는 QGIS 내에서 직접 속성을 편집 할 수 없었습니다. 따라서 OpenOffice 등에서 .DBF 파일을 편집해야합니다.

1.7 및 1.8에서 조건식을 수행하는 기능을 사용하여 필드 계산기에서 직접 속성 데이터를 편집 할 수 있습니다. 속성 편집을위한 추가 옵션을 제공 할 수있는 Python 속성 플러그인도 있습니다. 이것은 솔루션 일 수도 있고 튜토리얼 옵션 일 수도 있습니다.

이전 석사 과정 학생이자 현재는 대학 직원으로서이 문제, QGIS 외부에서 수행해야하는 이전 요구 사항을 이해했으며 이제 QGIS 내에서 모든 속성 편집을 수행 할 수있는 능력에 감사합니다. 원한다면 더 많은 도움을 드리겠습니다.


1
라이언 안녕, 그게 이상적인 솔루션 이겠지. 속성 테이블에서 텍스트를 검색하고 바꾸어 지저분한 OSM 이름을 표준화 할 수있어 .dbf 파일을 직접 편집하려고합니다. 오히려 QGIS 내에서 편집하고 싶습니다. 파이썬 속성 플러그인을 사용해보십시오-아이디어 솔루션 일 수 있습니다. 질문에서 정규식 검색 / 바꾸기 기능을 찾고 있다는 사실을 분명히 했어야합니다.
RobinLovelace

@ user1694378 질문을 명확하게 설명 할 수 있습니다.
underdark

저를 방해하는 것에 대해 진심으로 감사드립니다-실제로하고 싶었던 것을 더 잘 반영합니다.
RobinLovelace

3

LibreOffice의 Base를 사용 하여 dbf 파일을 수정할 수 있습니다 .

  1. 베이스 열기 (메인 메뉴 가져 오기)
  2. "기존 데이터베이스에 연결"을 선택하고 "dBASE"유형을 선택하십시오.
  3. dbf 파일이있는 폴더를 선택하십시오.
  4. 원하는대로 최종 옵션을 선택하고 "완료".
  5. 데이터베이스 연결 파일 이름을 원하는대로 지정하고 (예 : "MyxBasefiles.odb) 어딘가에 저장하십시오. 따라서이 파일을 클릭하여 데이터베이스 파일에 액세스하십시오. ooOoo, Nice.
  6. 왼쪽 패널에서 "테이블"을 선택하면 데이터 파일 ( "테이블")이 있습니다. 그들과 혼란.

이제 편집을 시작할 수 있습니다. 잘만되면 그것은 당신의 목적에 충분해야합니다.

DBF Explorer 는 Windows 전용이지만 시도해 볼 수도 있습니다 . 그러나 검색과 교체가 있습니다.

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


1
안녕하세요 RK 신속한 답변 감사합니다. .dbf 파일을 편집하는 안정적이고 안전한 방법 인 것 같습니다. 방금 당신이 말한 것을 시도했고 그것이 효과가 있다고 말하게되어 기쁩니다.
RobinLovelace

알아 둘만 한. 좋은 교훈이 있습니다. :)
RK

하지만 .. 방금 당신이 말한 것을 시도했고 그것이 개별 세포에 효과가 있다고 말하게되어 기쁩니다. 불행히도 OOBase에는 [bug] ( list.freedesktop.org/archives/libreoffice-bugs/2010 로 인해 튜토리얼에 필요한 검색 대체 기능이 없기 때문에이 특정 응용 프로그램에 대한 100 % 솔루션은 아닙니다. -12 월 /… ). 그러나 개별 셀에서 확실히 작동했습니다. 검색-복제 기능을 놓친 경우가 아니라면 셀 단위 편집을위한 90 % 솔루션입니다. 예를 들어 모든 "Tesc. *"항목을 "Tesco"로 바꾸는 방법이 있습니까?
RobinLovelace 15시 48 분

OO 자료 버그에 대한 더 나은 링크 : bugs.freedesktop.org/show_bug.cgi?id=32506
RobinLovelace

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