swimminginthecode DIVE!

ETC/PyQGIS

PyQGIS 01

dazz6 2025. 2. 7. 18:00

PyQGIS에서는 QgsProcessingAlgorithm을 상속받아 커스텀 알고리즘을 작성할 수 있다.

from qgis.core import QgsProcessingAlgorithm

class example(QgsProcessingAlgorithm):

 

QgsProcessingAlgorithm 가 제공하는 함수들을 오버라이딩하여 알고리즘 초기화, 실행 등을 자동화할 수 있다.

 

종류 역할
initAlgorithm(self, config=None) 알고리즘 초기화 파라미터 및 출력 정의
processAlgorithm(self, parameters, context, feedback) 알고리즘 실행 입력 데이터 처리 및 결과 생성
name(self) 알고리즘 ID 반환 내부적으로 사용되는 고유 ID
displayName(self) 알고리즘 UI 표시 이름 반환  
group(self) 알고리즘이 속한 그룹 이름 반환  
groupId(self) 그룹의 내부 ID 반환  
createInstance(self) 새로운 인스턴스 생성 필수 구현
shortHelpString(self) UI에서 보이는 간략한 설명 반환  
flags(self) 알고리즘의 동작 방식 제어 예 : 수정 가능 여부 설정
outputName(self, outputId) 출력의 이름 지정 필요시 사용

 

1. initAlgorithm

알고리즘이 실행되기 전에 파라미터와 출력을 정의하는 함수

 

self.addParameter() 로 입력 및 출력 항목을 설정한다.

def initAlgorithm(self, config=None):
	self.addParameter(QgsProcessingParameterVectorLayer(
    	'INPUT', '입력 레이어', [QgsProcessing.TypeVectorPolygon]
    ))

 

위 예제의 경우 입력 레이어라는 이름으로 입력 항목을 추가하고, 입력받은 데이터는 INPUT이라는 key를 부여한다.

입력 레이어는 벡터 폴리곤 타입으로 한정되어 있으며, 만약 선택 입력 사항으로 설정하고 싶다면 타입 뒤에 optional=True 옵션을 추가해 주면 된다.

예제처럼 따로 옵션에 대한 기재가 없을 경우, optional은 False로 필수 입력 사항이 된다.

def initAlgorithm(self, config=None):
    self.addParameter(QgsProcessingParameterVectorDestination(
        'OUTPUT', '출력', QgsProcessing.TypeVectorPolygon
    ))

 

위 예제의 경우 '출력' 이라는 이름으로 출력 항목을 추가하고, 데이터에 OUTPUT이라는 key를 부여한다.

출력 레이어의 타입은 벡터 폴리곤으로, 출력 파일을 저장하는 경우 QgsProcessingParameterVectorDestination를 사용하고 메모리 레이어*로 출력하고 싶은 경우 QgsProcessingParameterFeatureSink 를 사용한다.

 

메모리 레이어란?

QGIS에서 임시로 생성되는 벡터 레이어로, 파일로 저장하지 않고 RAM에서만 유지된다. QGIS를 종료하면 자동으로 사라지며, 명시적으로 저장하지 않는 한 파일 시스템에 저장되지 않고 속도가 빠르다. 

'ETC > PyQGIS' 카테고리의 다른 글

PyQGIS 04  (0) 2025.02.12
PyQGIS 03  (0) 2025.02.11
PyQGIS 02  (0) 2025.02.10
PyQGIS란?  (2) 2025.02.06