여러분이 PyQGIS 콘솔을 사용하지 않는 경우 이 페이지에 있는 코드 조각들을 다음과 같이 가져와야 합니다:
1from qgis.core import (
2 QgsProject,
3 QgsPathResolver
4)
5
6from qgis.gui import (
7 QgsLayerTreeMapCanvasBridge,
8)
2. 프로젝트 불러오기
플러그인으로부터 기존 프로젝트를, 또는 (더 자주) 독립 설치형 QGIS 파이썬 응용 프로그램을 개발할 때, 기존 프로젝트를 불러와야 하는 경우가 많습니다. (파이썬 응용 프로그램 참조)
현재 QGIS 응용 프로그램으로 프로젝트를 불러오려면 QgsProject
클래스의 인스턴스를 생성해야 합니다. 이 클래스는 싱글턴(singleton) 클래스이기 때문에, 생성하려면 이 클래스의 instance()
메소드를 사용해야만 합니다. 이 클래스의 read()
메소드를 호출해서 불러올 프로젝트의 경로를 넘겨줄 수 있습니다:
1# If you are not inside a QGIS console you first need to import
2# qgis and PyQt classes you will use in this script as shown below:
3from qgis.core import QgsProject
4# Get the project instance
5project = QgsProject.instance()
6# Print the current project file name (might be empty in case no projects have been loaded)
7# print(project.fileName())
8
9# Load another project
10project.read('testdata/01_project.qgs')
11print(project.fileName())
testdata/01_project.qgs
프로젝트를 (예를 들어 몇몇 레이어를 추가하거나 제거하기 위해) 수정하고 변경 사항을 저장해야 한다면, 프로젝트 인스턴스의 write()
메소드를 호출하십시오. write()
메소드도 프로젝트를 새 위치에 저장하기 위한 선택적인 경로를 입력받습니다.
# Save the project to the same
project.write()
# ... or to a new file
project.write('testdata/my_new_qgis_project.qgs')
read()
와 write()
두 함수 모두 작업 수행이 성공적이었는지 확인할 수 있는 불(boolean) 값을 반환합니다.
참고
QGIS 독립 설치형 응용 프로그램을 작성하고 있는 경우, 불러온 프로젝트를 캔버스와 동기화시키려면 다음 예시에서처럼 QgsLayerTreeMapCanvasBridge
클래스의 인스턴스를 생성해야 합니다:
bridge = QgsLayerTreeMapCanvasBridge( \
QgsProject.instance().layerTreeRoot(), canvas)
# Now you can safely load your project and see it in the canvas
project.read('testdata/my_new_qgis_project.qgs')
2.1. 경로 오류 해결하기
프로젝트에 불러온 레이어들을 다른 위치로 이동시키는 일이 생길 수도 있습니다. 이 경우 프로젝트를 다시 불러오면 모든 레이어 경로가 망가진 상태가 됩니다.
QgsPathResolver
클래스의 setPathPreprocessor()
메소드를 사용하면 사용자 지정 경로 전처리(pre-processor) 함수를 설정할 수 있습니다. 다시 말해 경로 및 데이터소스를 파일 참조 또는 레이어 소스로 변형시키기 전에, 경로 및 데이터소스를 조작할 수 있다는 뜻입니다.
처리 함수는 반드시 (원본 파일 경로 또는 데이터소스를 나타내는) 단일 문자열 인자를 받아서 해당 경로의 처리된 버전을 반환해야만 합니다.
어떤 망가진 레이어 경로도 처리하기 전에 이 경로 전처리 함수를 호출합니다.
다음은 몇몇 활용 사례입니다:
변경된 경로를 대체:
def my_processor(path): return path.replace('c:/Users/ClintBarton/Documents/Projects', 'x:/Projects/') QgsPathResolver.setPathPreprocessor(my_processor)
새 데이터베이스 호스트 주소로 대체:
def my_processor(path): return path.replace('host=10.1.1.115', 'host=10.1.1.116') QgsPathResolver.setPathPreprocessor(my_processor)
저장된 데이터베이스 인증 정보를 새 정보로 대체:
1def my_processor(path): 2 path= path.replace("user='gis_team'", "user='team_awesome'") 3 path = path.replace("password='cats'", "password='g7as!m*'") 4 return path 5 6QgsPathResolver.setPathPreprocessor(my_processor)