다른 방법을 추가하기 위해 로드 할 때 프로젝트 매크로 를 설정할 수 있습니다 .
- shapefile을 csv에 자동으로 결합
IP1
및 IP2
필드를 업데이트 합니다
- 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 파일을 편집하면 다음에 프로젝트를로드 할 때 필드가 자동으로 업데이트됩니다.