안녕하세요? 이번 글은 Google Earth Engine에서 접근 가능한 GCOM-C 해수면 온도 데이터에 관해 소개해 보겠습니다. 어떤 데이터인지 간략히 소개한 후, 해당 데이터에 접근 가능한 GEE 코드를 함께 제공해 봅니다.
GCOM (Global Change Observation Mission, 지구변화관측임무) 프로젝트
GCOM(지콤) 프로젝트는 지구 환경에 대한 전 지구적이고 장기적인 관측을 목적으로 합니다. GCOM은 지구의 물 순환과 기후변화를 모니터링하고, 우주 기반 관측을 통해 지구 환경 상태를 평가하는 데 기여할 수 있습니다. 10~15년에 걸친 GCOM의 전 지구적 장기 관측은 물 순환 메커니즘과 기후 변화에 대한 과학적 이해를 증진하는데 도움이 될 것으로 예상됩니다.
JAXA | Global Change Observation Mission - Climate "SHIKISAI" (GCOM-C)
Get information on the Global Change Observation Mission - Climate "SHIKISAI" (GCOM-C). The Japan Aerospace Exploration Agency (JAXA) performs various activities related to aerospace as an organization, from basic research in the aerospace field to develop
global.jaxa.jp
GCOM-W와 GCOM-C
GCOM 임무는 두 개의 위성 시리즈로 구성되어 있으며, GCOM-W는 물 순환 변화(water circulation changes)를, GCOM-C는 기후 변화(climate changes)를 관측합니다.
마이크로파 방사계(microwave radiometer)를 탑재한 GCOM-W는 강수량, 수증기량, 해상 풍속, 해수면 온도, 육지의 수위, 적설 깊이 등을 관측합니다.
SGLI(Second Generation GLobal Imager)를 탑재한 GCOM-C는 구름, 에어로졸, 해양 색, 식생, 눈과 빙하 등 탄소 순환 및 복사 수지와 관련된 지표 및 대기 요소를 관측합니다.
GCOM-C
GCOM-C는 향후 기온 상승을 정확히 예측하기 위해 필요한 탄소 순환 및 복사 수지의 변동 메커니즘을 규명하고자, 장기적이고 지속적인 전 지구 관측 및 데이터 수집을 수행합니다. 또한, 기후 수치모델을 보유한 연구기관들과 협력하여, 해당 모델에 기반한 기온 상승 예측 오차를 줄이고, 다양한 환경 변화에 대한 예측 정확도를 높이는 데 기여하고 있습니다.
GCOM-C에 탑재된 SGLI는 ADEOS-II(MIDORI II)에 장착되었던 GLI(GLobal Imager)의 후속 센서로, 근자외선부터 열적외선 영역(380nm~12μm)에 이르는 복사 에너지를 19개 채널로 측정하는 영상 방사계(imaging radiometer)입니다. SGLI는 지상 관측 폭이 1,000km를 초과하여, 일본 인근 중위도 지역에서는 약 이틀에 한 번꼴로 전 지구 관측이 가능하며, 기존의 유사한 전 지구 센서보다 높은 해상도를 제공합니다. 또한, 편광 관측 기능과 다각도 관측 기능도 갖추고 있습니다.
GCOM-C/SGLI L3 Sea Surface Temperature (해수면 온도)
이 데이터는 해수면 온도 데이터이며 3~4일의 지연(latency)을 두고 지속적으로 생산되는 자료입니다.
GCOM-C/SGLI L3 Sea Surface Temperature (V3) | Earth Engine Data Catalog | Google for Developers
이 제품은 해수면의 온도입니다. 지연 시간이 3~4일인 진행 중인 데이터 세트입니다. GCOM-C는 향후 온도 상승에 관한 정확한 예측을 내리기 위해 필요한 방사 예산 및 탄소 순환의 변동 이면의 메
developers.google.com
GEE에서 해당 데이터를 직접 접속해 보도록 하겠습니다. 저는 해당 데이터를 불러온 후에 제가 프로젝트로 다루고 있는 도미니카공화국 코투바나마 국립공원 지역을 대상으로 해수면 온도 통계를 산출해 보려고 합니다. 먼저, 필요한 파이썬 패키지들을 호출한 후, GEE 인증 및 초기화를 우선 진행하겠습니다.
import ee
import geemap
import datetime
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
plt.rcParams['font.family'] = 'Malgun Gothic'
# Earth Engine 인증
ee.Authenticate()
# Earth Engine 초기화
ee.Initialize(project='ee-foss4g')
코투바나마 국립공원 지역을 중심으로 지도 객체를 생성해 보겠습니다.
# 코투바나마 국립공원: WDPA ID가 180인 보호지역
# https://www.protectedplanet.net/180
wdpa = (
ee.FeatureCollection("WCMC/WDPA/current/polygons")
.filter(ee.Filter.eq('WDPAID', 180))
)
aoi = wdpa.geometry()
# 지도 객체 생성
m = geemap.Map(width="800px", height="500px")
m.centerObject(aoi, 5)
m
GCOM-C 해수면 온도 데이터를 불러와 보겠습니다. 여기서는 2025년 3월 한달에 걸쳐 주간 데이터만 선택한 후, 평균 SST에 대해 시각화를 진행해 봤습니다.
# GCOM-C 해수면 온도 데이터 불러오기 및 필터링
sst = (
ee.ImageCollection('JAXA/GCOM-C/L3/OCEAN/SST/V3')
.filterDate('2025-03-01', '2025-04-01') # 원하는 기간 설정
# D: Daytime(주간) data, A: Nighttime(야간) data
.filter(ee.Filter.eq('SATELLITE_DIRECTION', 'D'))
.select('SST_AVE')
.mean()
.multiply(0.0012)
.add(-10)
)
# 시각화 파라미터 설정
vis_params = {
'min': 0,
'max': 30,
'palette': ['000000', '005aff', '43c8c8', 'fff700', 'ff0000']
}
m.addLayer(sst, vis_params, 'GCOM-C SST')
m.add_colorbar(
vis_params, label="SST (°C)", orientation="vertical", layer_name="GCOM-C SST"
)
m.addLayer(aoi, {
'color': '00FF00', # 녹색
'width': 2 # 외곽선 두께
}, 'Cotubanama National Park')
m
코투바나마 국립공원 지역에서 10km 버퍼 영역 내 평균 SST를 계산해 보겠습니다. 이런 방식으로, 내가 원하는 지역, 시기에 대해 통계를 산출할 수 있습니다.
# 10km 버퍼 영역 내 평균 SST 계산
aoi = aoi.buffer(10000)
mean_dict = sst.reduceRegion(
reducer=ee.Reducer.mean(),
geometry=aoi,
scale=5000, # GCOM-C SST 해상도
maxPixels=1e9
)
# 5. 결과 출력
print("10km 버퍼 영역 내 평균 SST (°C):", mean_dict.getInfo())
10km 버퍼 영역 내 평균 SST (°C): {'SST_AVE': 27.717691758165916}
이번에는 2018년부터 2025년까지 연도별 평균 SST의 통계 및 시각화를 진행해 보겠습니다.
# 분석 연도 범위
years = list(range(2018, 2025))
mean_ssts = []
# 연도별 평균 SST 계산
for year in years:
start = ee.Date.fromYMD(year, 1, 1)
end = start.advance(1, 'year')
sst = (
ee.ImageCollection('JAXA/GCOM-C/L3/OCEAN/SST/V3')
.filterDate(start, end)
.filter(ee.Filter.eq('SATELLITE_DIRECTION', 'D'))
.select('SST_AVE')
.mean()
.multiply(0.0012)
.add(-10)
)
# 평균 SST 통계
mean_dict = sst.reduceRegion(
reducer=ee.Reducer.mean(),
geometry=aoi,
scale=5000,
maxPixels=1e9
)
sst_mean = mean_dict.get('SST_AVE').getInfo()
mean_ssts.append(sst_mean)
# 시각화
plt.figure(figsize=(8, 4))
plt.plot(years, mean_ssts, marker='o', linestyle='-', color='blue')
plt.title('연도별 평균 해수면 온도 (GCOM-C, 코투바나마 국립공원)')
plt.xlabel('연도')
plt.ylabel('SST (°C)')
plt.grid(True)
plt.tight_layout()
plt.savefig('gcomc_sst_yearly_avg.png', dpi=300)
plt.show()
이번에는 반복문을 통해 월별 평균 SST 통계 및 시각화를 진행해 보겠습니다. 해수면 온도 데이터를 다루고자 하시는 분들께는 참고가 되실 것 같습니다. 감사합니다.
# 시작/종료 날짜
start_date = datetime.date(2018, 2, 1)
end_date = datetime.date(2025, 3, 1)
# 월 단위 반복
current = start_date
dates = []
ssts = []
while current <= end_date:
next_month = (current.replace(day=28) + datetime.timedelta(days=4)).replace(day=1)
ee_start = ee.Date(str(current))
ee_end = ee.Date(str(next_month))
# 월별 평균 SST 계산
sst = (
ee.ImageCollection('JAXA/GCOM-C/L3/OCEAN/SST/V3')
.filterDate(ee_start, ee_end)
.filter(ee.Filter.eq('SATELLITE_DIRECTION', 'D'))
.select('SST_AVE')
.mean()
.multiply(0.0012)
.add(-10)
)
# 평균 SST 통계
mean_dict = sst.reduceRegion(
reducer=ee.Reducer.mean(),
geometry=aoi,
scale=5000,
maxPixels=1e9
)
mean_val = mean_dict.get('SST_AVE').getInfo()
dates.append(current)
ssts.append(mean_val)
current = next_month
# 시각화
plt.figure(figsize=(8, 4))
plt.plot(dates, ssts, marker='o', linestyle='-', color='teal')
plt.title('월별 평균 해수면 온도 (GCOM-C, 코투바나마 국립공원)', fontsize=14)
plt.xlabel('연도')
plt.ylabel('SST (°C)')
plt.grid(True)
plt.tight_layout()
plt.savefig('gcomc_sst_monthly_avg.png', dpi=300)
plt.show()