# 수위 위성 플랫폼: 강 유역 게이지와 이미지 매칭
"Level-Satellite" 서비스는 특정 강 게이지의 수위에 맞춰 위성 이미지를 선별하는 도전을 해결합니다. 수문학자들은 종종 이런 불일치를 겪습니다: 이미지는 있지만 그때 수위가 분석 대상과 맞지 않는 경우죠. 이 플랫폼은 Landsat와 Sentinel-2 컬렉션을 날짜와 구름 덮개뿐만 아니라 러시아 국가 수자원 등록 정보 시스템(AIS GMVO)의 수문 데이터를 활용해 필터링하여, 강 채널, 범람원, 침수 지역 분석에 적합한 장면을 제공합니다.
Google Earth Engine 프로토타입: 초기 한계
초기 프로토타입은 AIS GMVO 데이터를 활용해 하나의 강 유역 구역에서 Google Earth Engine으로 구축되었습니다. 게이지 지오메트리를 기준으로 이미지를 필터링하다 보니 문제가 드러났습니다: 인터페이스가 느리고, 컬렉션 처리 속도가 더뎌 쿼터가 금세 소진되는 거죠. GEE API를 통한 사전 처리로 (게이지, 이미지 ID, 구름 덮개) 조회 테이블을 생성해 프론트엔드 부하를 줄였습니다.
하지만 이 접근법에는 단점이 있었습니다:
- 한 구역 처리에 8~10시간 걸림; 20개 이상 구역에서는 비현실적.
- 새 데이터 추가 시 전체 재계산 필요.
- 어느 단계에서든 오류 발생 시 처음부터 다시 시작.
극한 조건에서의 데이터 수집
AIS GMVO 수문 데이터 접근이 끊길 위기에 처했습니다. 대량 다운로드 파서를 현장에서—AI를 활용한 보트 위에서 다듬었습니다. 마감 직전 17:55에 성공적으로 다운로드해 수백만 건의 관측 데이터를 확보했습니다. 이제 데이터는 로컬에 저장되어 외부 소스 의존성을 없앴습니다.
STAC와 Microsoft Planetary Computer로 전환
주요 업그레이드는 위성 장면 카탈로그화에 STAC 표준을 채택하고, API 접근을 위해 Microsoft Planetary Computer(MPC)를 도입한 것입니다. STAC은 컬렉션 간 메타데이터를 표준화해 제공자에 상관없이 지오메트리와 시간으로 검색할 수 있게 합니다.
아키텍처가 간소화되었습니다:
- 게이지와 관측 데이터베이스.
- 수위, 기간, 구름 덮개로 필터링.
- 메타데이터로 MPC에서 장면 검색.
- 필요 시 이미지 로드.
이로써 무거운 컬렉션 필터링을 없애 놀라운 속도를 달성했습니다.
데이터베이스 아키텍처
CSV/Excel에서 PostgreSQL + PostGIS로 전환해 2,800만 건 관측을 처리합니다. 핵심 엔티티는 "수문 관측 → 날짜 → 위성 장면"을 연결합니다. 쿼리는 밀리초 단위로 실행: 먼저 수문 필터, 그다음 장면 검색, 로딩.
DB는 다음 테이블을 갖춥니다:
- 게이지 (좌표, 지오메트리).
- 관측 (수위, 유량, 날짜).
- 장면 메타데이터 (ID, 구름 덮개, 데이터셋).
날짜와 지오메트리 인덱스가 JOIN을 가속화합니다.
현재 구현과 기술 스택
사용자는 게이지, 수위 범위, 기간, 필터를 선택하면 지도에 장면을 표시하고 내보내기 옵션을 제공합니다. Leaflet.js가 지도를, Chart.js가 수위 그래프를 담당합니다.
기술 스택:
| 계층 | 기술 |
|-------|--------------|
| 백엔드 | Python, Flask, Gunicorn |
| 데이터베이스 | PostgreSQL, PostGIS (2,800만 레코드) |
| 위성 데이터 | Microsoft Planetary Computer |
| 프론트엔드 | Leaflet.js, Chart.js |
| 인프라 | Docker, nginx, HTTPS |
서비스는 level-satellite.ru에서 운영 중, 리포지토리: github.com/ruorv/level-satellite-public.
주요 교훈
- 이미지 선별을 실제 수위에 직접 연동해 비교 불가능한 데이터를 피함.
- STAC/MPC로 GEE 쿼터 없이 유연한 접근.
- PostGIS로 대규모 데이터셋 공간 쿼리 가속.
- 확장성 아키텍처: 전체 재빌드 없이 게이지/데이터 추가 가능.
- 커뮤니티 기여를 위한 오픈소스 코드.
— Editorial Team
아직 댓글이 없습니다.