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를 종료하면 자동으로 사라지며, 명시적으로 저장하지 않는 한 파일 시스템에 저장되지 않고 속도가 빠르다.