REMOTE SENSING

geemap: Google Earth Engine 대화형 매핑용 Python 패키지 소개

유병혁 2023. 7. 25. 23:51

안녕하세요? 이번 글은 Google Earth Engine과 ipyleaflet을 사용한 대화형 매핑용 Python 패키지, geemap(지맵)에 관해 간략히 소개해 보겠습니다. geemap의 개발자는 녹스빌 테네시 대학교 지리 및 지속가능성학과의 부교수님이신 추생 우 박사님(Dr. Qiusheng Wu)입니다.

 

geemap

Welcome to geemap A Python package for interactive mapping with Google Earth Engine, ipyleaflet, and ipywidgets. Acknowledgment: This material is based upon work supported by the National Aeronautics and Space Administration (NASA) under Grant No. 80NSSC22

geemap.org

 

geemap(지맵)

geemap은 위성영상 및 지리공간 데이터셋의 멀티-페타바이트 카탈로그가 있는 클라우드 컴퓨팅 플랫폼, Google Earth Engine(GEE)대화형 매핑(interactive mapping)을 위한 Python 패키지입니다.

 

지난 몇 년간, GEE는 지리공간 커뮤니티에서 매우 인기를 얻었고 지역 및 전세계 규모에서 수많은 환경 응용 프로그램을 가능하게 했습니다. GEE는 Earth Engine 서버에 계산 요청을 하기 위한 JavaScript와 Python API를 모두 제공합니다. GEE JavaScript API의 포괄적인 문서 및 대화형 IDE(예: GEE JavaScript Code Editor)와 비교할 때, GEE Python API는 대화형으로 결과를 시각화하기 위한 문서가 상대적으로 적고 기능도 제한되어 있습니다.

 

geemap Python 패키지는 이 격차를 메우기 위해 만들어졌습니다. geemap은 ipyleaflet과 ipywidgets를 기반으로 하며, 사용자가 Jupyter 기반 환경 내에서 Earth Engine 데이터셋을 대화식으로 분석하고 시각화할 수 있습니다.

 

geemap은 Google Earth Engine을 탐색하기 위해 다양한 라이브러리 및 도구의 Python 생태계를 활용하려는 학생과 연구원을 위한 것입니다. 또한 GEE JavaScript API에서 Python API로 전환하려는 기존 GEE 사용자를 위해 설계되었습니다. geemap 패키지의 자동화된 JavaScript-to-Python 변환 모듈은 기존 GEE JavaScript를 Python 스크립트 및 Jupyter 노트북으로 변환하는데 필요한 시간을 크게 줄일 수 있습니다.

 

비디오 자습서 및 노트북 예제를 보려면 예제 페이지를 방문하시면 됩니다.

geemap 모듈 및 방법에 대한 전체 설명서를 보려면 API Reference를 방문하시면 됩니다.

Open Geospatial Solutions (https://www.youtube.com/@giswqs)

 

geemap 설치방법

 

Google Earth Engine

 

earthengine.google.com

geemap을 사용하려면 먼저 Google Earth Engine 계정(https://earthengine.google.com/signup/)에 가입해야 합니다. 애플리케이션이 승인되지 않으면 Google Earth Engine을 사용할 수 없습니다. 애플리케이션 승인 이메일을 받으면 Earth Engine Code Editor(https://code.earthengine.google.com/)에 로그인하여 JavaScript API에 익숙해질 수 있습니다.

*구글 이메일(gmail.com) 계정으로 가입을 권장합니다.

Geemap은 PyPI에서 사용할 수 있습니다. geemap을 설치하려면 터미널에서 다음 명령을 실행합니다.

 

geemap

A Python package for interactive mapping using Google Earth Engine and ipyleaflet

pypi.org

pip install geemap

 

geemap 시작하기

Jupyter 노트북을 실행합니다.

jupyter notebook

ee(Google Earth Engine)와 geemap 라이브러리를 가져옵니다.

 

# 라이브러리 호출
import ee
import geemap

geemap과 ee 모듈을 가져오고, Earth Engine에 인증하고 초기화하는 작업을 수행합니다. ee.Authenticate() 함수는 Earth Engine과 연결된 Google 계정으로 인증하고 인증 토큰을 얻는 역할을 합니다. 한 번 인증이 완료되면, 그 이후에는 인증 코드를 다시 입력할 필요 없이 해당 인증 토큰을 사용하여 Earth Engine과 통신할 수 있습니다.

import geemap
import ee

# Earth Engine 인증
ee.Authenticate()

# Earth Engine 초기화
ee.Initialize()

 

 

대화형 지도(interactive map)를 생성합니다.geemap 라이브러리의 Map 클래스를 사용하여 새로운 지도 객체를 생성하고, setCenter() 메서드를 사용하여 지도의 중심을 설정합니다. 여기서는 해당 지도의 중앙을 변산반도국립공원의 위치로 설정하고 확대 수준을 12로 설정합니다.

# 지도 객체 생성
Map = geemap.Map()

# 지도 배치 설정
Map.setCenter(126.55, 35.65, 12)  # 변산반도국립공원

Map

이번에는 Landsat 8호 위성 이미지(USGS Landsat 8 Collection 2 Tier 1 Raw Scenes)를 로드하고 지도 위에 시각화해 보겠습니다.

 

USGS Landsat 8 Collection 2 Tier 1 Raw Scenes  |  Earth Engine Data Catalog  |  Google for Developers

Landsat 8 Collection 2 Tier 1 DN values, representing scaled, calibrated at-sensor radiance. Landsat scenes with the highest available data quality are placed into Tier 1 and are considered suitable for time-series processing analysis. Tier 1 includes Leve

developers.google.com

Earth Engine에서 Landsat 8 위성 이미지를 로드하기 위해 ee.ImageCollection 객체를 생성합니다. 'LANDSAT/LC08/C02/T1'은 Landsat 8 위성의 Collection 2 Tier 1 컬렉션을 나타냅니다. filterDate() 메서드를 사용하여 이미지 컬렉션에서 특정 날짜 범위의 이미지를 필터링합니다. 여기서는 2023년 6월 1일부터 2023년 6월 30일까지의 이미지를 선택합니다.

# 기본 객체 생성
Map = geemap.Map()

# Landsat 이미지 로드
image = ee.ImageCollection('LANDSAT/LC08/C02/T1')\
           .filterDate('2023-06-01', '2023-06-10')

vizParams 변수에 시각화 파라미터를 정의합니다. 'bands': ['B6', 'B5', 'B4']는 빨강, 녹색, 파랑 (RGB) 밴드를 선택하여 False Color (Vegetative Analysis) 스타일의 이미지를 생성합니다. 'min': 0과 'max': 30000은 해당 이미지의 강도 값을 0부터 30000 사이로 스트레칭하도록 지정합니다. 코드를 실행하면 지정된 날짜 범위 내의 Landsat 8 이미지가 False Color 스타일로 시각화되어 변산반도국립공원의 지도 위에 표시됩니다.

# 시각화 파라미터 정의
vizParams = {'bands': ['B6', 'B5', 'B4'], 'min': 0, 'max': 30000}

# 지도 배치 및 이미지 시각화
Map.setCenter(126.55, 35.65, 12)  # 변산반도국립공원
Map.addLayer(image, vizParams, 'False Color (Vegetative Analysis)')

Map