태그 보관물: attribute-joins

attribute-joins

중복을 만들지 않고 Excel에서 QGIS의 속성 테이블로 데이터를 조인 하시겠습니까? 테이블이 있습니다. QGIS에서 빈

QGIS에 두 개의 빈 필드가있는 속성 테이블이 있습니다.

예 _1

QGIS에서 빈 필드를 채우기 위해 Excel 데이터베이스를 가져오고 싶습니다. 내 Excel 파일은 QGIS 속성 테이블의 열과 일치합니다.

Excel (.CSV)을 shapefile에 올바르게 결합 할 수 있습니다. 그러나 원하는대로 빈 필드를 채우는 대신 프로세스가 중복을 생성했습니다. «테이블 관리자»의 도움으로 상황을 수정할 수 있지만 시간이 많이 걸립니다. Excel 데이터에보다 효율적으로 참여할 수있는 방법을 찾고 있습니다.

중복을 만들지 않고 Excel 파일을 속성 테이블에 결합하려면 어떻게해야합니까?



답변

나는 삶을 더 쉽게 만들기 위해 다음과 같은 일을 할 것입니다.

이 작업을 수행하기 전에 shapefile을 백업하십시오.

  1. 셰이프 파일에서 레이어 속성 / 필드로 이동하여 편집 모드를 켭니다.
  2. ID 필드를 제외한 모든 필드를 선택하십시오
  3. ID 필드를 제외한 모든 필드 삭제
  4. QGIS에서 csv 파일을 레이어로 추가 (주 메뉴 / 레이어 / 레이어 추가 / 구분 된 텍스트 레이어 추가) (지오메트리 선택 안 함)
  5. 쉐이프 파일에서 속성 / 조인을 선택하고 소스 및 대상의 ID 필드를 모두 선택하십시오. 이 질문에 대한 다른 답변에서 설명한 것처럼.
  6. 수정 된 Shapefile을 저장하십시오.

이것이 내가 참조하는 필드 탭입니다

불필요한 필드를 삭제하기 전과 후에 편집을 토글하는 것을 잊지 마십시오


답변

Excel 파일을 shapefile에 결합 할 수 있습니다. 공통 속성으로 결합하고 결과는 각 레코드가 shapefile 및 Excel 파일의 속성을 보유하는 결합 된 계층이됩니다.

먼저 Excel 파일과 벡터를 나중에 레이어에로드하십시오. 내가 만든 일부 테스트 데이터를 사용했지만 설정이 아래와 비슷해야합니다.

이제 레이어 패널에서 레이어를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 결합을 선택하십시오. 먼저 왼쪽 하단의 녹색 + 기호 (아래 그림의 큰 빨간색 화살표)를 누르면 새로운 벡터 조인 추가 메뉴가 나타납니다 (아래와 같이) 여기에 조인 레이어가 엑셀 파일이됩니다 (따라서 적절한 엑셀 파일을 선택하십시오) & sheet) 결합 필드는 shapefile에 대한 공통 속성을 보유하는 Excel 파일의 필드입니다. 대상 필드는 shapefile에서 일치하는 필드입니다. (제 경우에는 두 공통 필드가 모두 단위로 명명되었지만 셰이프 파일에서 필드가 UNIT_라고 불리는 경우 내 대상 필드에 UNIT 대신 해당 필드를 사용했을 것입니다)

조인시 엉망이 될 수있는 몇 가지 다른 옵션이 있습니다. 어쨌든 특정 필드 만 보려는 경우와 같이 이제는 조인됩니다. 돌아가서 모양 파일의 속성을 보면 볼 수 있습니다. 이제 아래와 같이 Excel 파일의 해당 속성이 있습니다.

다음은 단계별로 수행하는 방법을 보여주는 몇 가지 유용한 자습서입니다.

https://www.mapbox.com/tilemill/docs/guides/joining-data/

http://maps.cga.harvard.edu/qgis/wkshop/join_csv.php

http://qgis.spatialthoughts.com/2012/03/using-tabular-data-in-qgis.html

QGIS에서 shapefile의 속성 테이블로 외부 테이블을 조인하는 방법은 무엇입니까?

http://www.digital-geography.com/qgis-tutorial-ii-how-to-join-data-with-shapefiles/#.Vs9vpmHXKUk

의견에 언급 된 튜토리얼 ArMoraer.


답변

다른 방법을 추가하기 위해 로드 할 때 프로젝트 매크로 를 설정할 수 있습니다 .

  1. shapefile을 csv에 자동으로 결합
  2. IP1IP2필드를 업데이트 합니다
  3. shapefile의 필드 만 남기고 결합 된 필드를 제거합니다 (즉, 중복되지 않음).

먼저 프로젝트를 작성하지 않은 경우 작성하고 도구 모음으로 이동하십시오.

프로젝트> 프로젝트 속성 …> 매크로

그런 다음 def openProject():함수 에서 다음 코드를 사용 하여 레이어 이름과 결합하려는 필드를 입력하십시오. 필드와 함께 shapefile 및 csv 파일에 대해 “Example”및 “spreadsheet”를 각각 사용했습니다 ID.

from PyQt4.QtCore import *
import qgis
from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your shapefile name
    if layer.name() == "Example":
        qgis.utils.iface.setActiveLayer(layer)
        shp = qgis.utils.iface.activeLayer()

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your csv name
    if layer.name() == "spreadsheet":
        qgis.utils.iface.setActiveLayer(layer)
        csv = qgis.utils.iface.activeLayer()

# Set up join parameters
shpField='ID'
csvField='ID'
joinObject = QgsVectorJoinInfo()
joinObject.joinLayerId = csv.id()
joinObject.joinFieldName = csvField
joinObject.targetFieldName = shpField
shp.addJoin(joinObject)

# Define fields to update and joined fields to copy values from
ip1 = shp.fieldNameIndex('IP1')
ip1_join = shp.fieldNameIndex('spreadsheet_IP1')
ip2 = shp.fieldNameIndex('IP2')
ip2_join = shp.fieldNameIndex('spreadsheet_IP2')

shp.startEditing()
for feat in shp.getFeatures():
    shp.changeAttributeValue(feat.id(), ip1, feat.attributes()[ip1_join])
    shp.changeAttributeValue(feat.id(), ip2, feat.attributes()[ip2_join])
shp.commitChanges()

# Remove join
shp.removeJoin(csv.id())

확인 층이되어 있는지 확인 하지 합류, 프로젝트를 저장 하고 매크로를 사용 도구 모음으로 이동하여 :

설정> 일반> 매크로 사용


이제 프로젝트를 닫고 csv 파일을 편집하면 다음에 프로젝트를로드 할 때 필드가 자동으로 업데이트됩니다.


답변

내 제안은 오픈 소스 LibreOffice / Open Office 를 사용하여 Excel 파일을 편집하고 .dbf 파일을 만드는 것입니다. 테스트 워크 북을 준비했습니다.
테스트 통합 문서-링크

  1. Libre Office / Open Office에서 파일을 엽니 다.
  2. Excel 파일에서 “Excel”시트 데이터에 붙여 넣습니다.
  3. .dbf 파일에서 “DBF”시트 데이터에 붙여 넣기 (ID, X, Y 만 붙여 넣기) (IP1, IP2 값이 자동으로 추가됨)
  4. name.dbf 파일로 저장하십시오 (여기서 이름은 모양 파일 이름과 동일 함).

QGIS에서 중복되지 않은 결과 테이블 :


답변

빈 필드가 시작되는 이유는 무엇입니까? 빈 필드없이 시작하여 조인에서 생성 된 두 개의 열만 사용할 수 있습니까? 이것이 가장 간단한 방법이라고 생각합니다. 또는 ArcGIS의 “로드”도구와 유사한 도구를 찾으십시오.

https://desktop.arcgis.com/en/arcmap/latest/extensions/production-mapping/loading-data-into-a-geodatabase.htm

지오 데이터베이스를 사용하지 않는 경우이 방법을 적극 권장합니다.


답변

.shp 파일이 .DBF (데이터베이스 파일)에 기인하여 지원되므로 복제하지 않고 직접 참여할 수있는 방법이 있는지 모르겠습니다. 이 DBF에는 정수, 실수, 문자열 등과 같은 열 유형의 길이와 정밀도가 자세히 선언되어 있습니다. CSV 파일에는 선언 된 유형이없는 일반 열만 있습니다. 파일이 얼마나 큰지 모르겠습니다. 나를 위해, 나는 중복 필드를 유지하고 일반 수식과 함께 필드 caluclator 를 사용 합니다 .

Original Field_x = 중복 Field_x

그런 다음 모든 중복 필드를 삭제하십시오 (QGIS 또는 데이터베이스 프로그램을 통해).


답변

이 문제를 해결하는 가장 쉬운 방법은 조인 전에 QGIS 테이블에서 문제의 두 열을 삭제하는 것입니다. 그런 다음 shapefile을 결합하면 원하는 두 열이 중복되지 않고 원래 열 이름을 유지합니다.