Python 구현: Geopandas와 Rasterio를 활용한 다중 폴리곤 벡터의 래스터 데이터 지능형 일괄 마스킹

1. 왜 "지능형 일괄 마스킹" 스크립트가 필요한가?

원격 탐사 이미지나 지리 공간 데이터를 자주 다룬다면, 다음과 같은 상황을 경험해봤을 것이다: 한 지역 전체를 커버하는 고해상도 위성 이미지(예: 한 도(TIF 파일))와, 수십에서 수백 개의 개별 영역(예: 시/군 행정 구역, 연구 샘플 구역, 농지 필지)이 밀집된 SHP 파일이 있다. 목표는 이 큰 이미지를 SHP의 각 폴리곤 경계에 따라 정밀하게 잘라내어 여러 개의 작은 이미지를 생성하는 것이다.

전통적인 GIS 소프트웨어(ArcGIS나 QGIS 등)로 수동 작업이 가능한가? 물론 가능하다. 하지만 효율성은... 클리핑 도구를 열고, 이미지를 선택하고, 폴리곤을 선택하고, 출력 경로를 설정한 후 "실행"을 클릭한다. 그리고 이 과정을 수십에서 수백 번 반복한다. 손가락이 저리는 것뿐만 아니라, 중간에 매개변수를 잘못 설정하거나 특정 폴리곤의 좌표계 문제로 클리핑이 실패하면 문제를 추적하기가 바늘구멍에 실 꿰기다. 나는 직접 소프트웨어 인터페이스로 200개가 넘는 샘플 구역을 처리하는 데 오후 내내 시간을 썼고, 결국 좌표계 통일을 잊어서 10개 이상의 결과가 모두 비어 있어 다시 해야 했다.

그래서 나는 Python으로 전체 프로세스를 자동화하는 데 시간을 투자했다. 핵심은 Geopandas로 벡터 폴리곤을 우아하게 처리하고, Rasterio로 래스터 이미지를 전문적으로 읽고 쓰고 클리핑하는 것이다. 오늘 공유할 것은 단순히 실행되는 스크립트가 아니라, 여러 함정을 겪고 몇 번 최적화한 "엔지니어링된" 코드 템플릿이다. 이 코드는 한 번의 클릭으로 일괄 클리핑을 수행할 뿐만 아니라, 좌표계 정렬을 지능적으로 처리하고, 출력 파일 이름을 자동으로 생성하며, 메모리 사용 최적화 팁까지 제공한다. 원격 탐사 전공자든, GIS, 생태학, 농업 분석을 하는 엔지니어든, 이 스크립트는 반복 작업에서 해방시켜 더 가치 있는 분석에 시간을 쓸 수 있게 해준다.

2. 환경 설정과 핵심 라이브러리 첫걸음

일을 잘하려면 먼저 도구를 잘 다듬어야 한다. 이 자동화 프로세스는 전적으로 Python의 지리 공간 처리 라이브러리에 의존하며, 설치가 복잡하지 않다.

2.1 "세 가지 핵심" 설치

명령줄(터미널 또는 Anaconda Prompt)을 열고, 한 줄 명령으로 핵심 의존성을 설치한다. 특히 geopandasconda 사용을 강력히 권장하는데, 이는 의존하는 저수준 C 라이브러리(GDAL, GEOS 등)가 conda 환경에서 더 쉽게 관리되어 많은 컴파일 오류를 피할 수 있기 때문이다.

conda install -c conda-forge geopandas rasterio

pip 사용에 익숙하다면 시도할 수 있지만, Windows에서는 문제가 발생할 수 있다:

pip install geopandas rasterio

설치 후, 운영체제 인터페이스 라이브러리 os와 데이터 분석 라이브러리 pandas도 확인한다 (geopandas는 일반적으로 pandas를 포함한다):

pip install pandas

설치를 확인하려면 새 Python 스크립트를 만들고 다음을 임포트해 본다:

import geopandas as gpd
import rasterio
print("모든 라이브러리 준비 완료!")

2.2 "왼팔과 오른팔" 이해하기: Geopandas와 Rasterio

이 두 핵심 도구를 간단히 이해하면 코드 작성 시 더 확신을 가질 수 있다.

Geopandas는 "벡터 데이터 관리자"이다. Pandas의 DataFrame이 테이블 데이터를 처리하는 데 유용하다면, Geopandas의 GeoDataFrame은 기하학 열(예: 점, 선, 면)을 가진 슈퍼 테이블이다. SHP 파일을 gpd.read_file()로 읽으면 GeoDataFrame이 된다. 각 행은 하나의 폴리곤 면을 나타내며, geometry 열에 모양 정보를 저장하고, 이름, 번호, 면적 등의 속성 열도 가질 수 있다. 이후 각 면을 순회하며 클리핑하는 것은 이 GeoDataFrame의 각 행을 순회하는 것이다.

Rasterio는 "래스터 데이터 전문가"이다. 강력한 GDAL 라이브러리를 캡슐화하면서도 더 Pythonic하고 친숙한 인터페이스를 제공한다. rasterio.open()으로 TIF 이미지를 열면 픽셀 데이터뿐만 아니라, 좌표계(CRS), 이미지 변환 매개변수(transform, 픽셀 좌표를 실제 지리 좌표로 매핑), 이미지 크기, 데이터 타입 등 중요한 메타데이터를 쉽게 얻을 수 있다. 클리핑 함수 rasterio.mask.mask()는 여기서 핵심이며, 기하학 리스트를 받아 원본 이미지에서 해당 부분을 효율적으로 추출한다.

이 두 라이브러리가 함께 작동하여, 복잡한 지리 공간 데이터 처리를 간단하고 효율적으로 만든다.

태그: Geopandas Rasterio python 래스터 클리핑 벡터 마스킹

5월 26일 12:32에 게시됨