Насколько можно верить спутнику, который меряет температуру земли

Летом 2022 года на Алтае датчик, лежащий на земле, показал +48 °C. Спутник Aqua почти в то же время над той же точкой увидел около +33. Кто из них прав и насколько вообще можно доверять «космической» температуре?
Меня зовут Александра. В 2024 году я разбиралась с этим в дипломе в ВКИ НГУ, а сейчас, после двух лет работы DevOps‑инженером, решила заново посмотреть на ту работу и рассказать, что из неё в итоге получилось.
Спутниковые карты температуры поверхности используют климатологи, агрономы, гидрологи и пожарные службы. Они удобны: одна картинка покрывает тысячи километров, а наземная станция видит только свою точку. Но спутник не меряет температуру напрямую. Он ловит инфракрасное излучение сквозь атмосферу с высоты 700 км, а потом алгоритм пересчитывает его в градусы. Поэтому любые такие данные нужно проверять землёй. Эта проверка называется валидацией.
В статье расскажу, как я сравнивала данные MODIS (спутники Terra и Aqua) и Landsat 8 с показаниями термодатчиков, какие получились расхождения и на какие грабли я наступила. Код лежит на GitHub.
Сначала договоримся, какую температуру мы меряем
Спутник видит температуру поверхности, а не воздуха. В англоязычной литературе это LST, Land Surface Temperature: насколько нагрет верхний слой почвы, камней или травы. Прогноз погоды и метеостанции говорят о воздухе на высоте 2 метра. Это две очень разные величины.
У меня в данных было и то, и другое: на каждой площадке стоял датчик на поверхности и датчик температуры воздуха. Вот что они показали с 15 июля по 27 октября 2022 года (здесь пары датчиков с шагом 4 часа, поэтому часть дневных пиков между замерами не попала):
Площадка | Поверхность, макс., °C | Воздух, макс., °C | Поверхность теплее воздуха днём, в среднем, °C | Максимальная разница, °C |
|---|---|---|---|---|
А1 | 45,5 | 27,5 | 10,8 | 25,5 |
А2 | 46,5 | 33,5 | 6,5 | 17,5 |
А3 | 42,5 | 28,5 | 7,8 | 21,5 |
А6 | 41,5 | 28,5 | 9,4 | 18,5 |
А9 | 41,0 | 33,0 | 4,3 | 13,5 |
В солнечный день земля нагревается на 10–25 градусов сильнее воздуха. Ночью разница почти исчезает: в среднем 0,4–3 °C. Поверхность к тому же очень быстро меняется. Средний суточный размах на площадке А1 составил 31 °C, а 4 августа 2022 года — 42 °C: от +6,5 ночью до +48,5 днём.
Отсюда первый вывод, ещё до всякого спутника. Сравнивать спутниковую LST с температурой воздуха из прогноза бессмысленно. Проверять её можно только датчиком, который лежит на той же поверхности.
Полигон для замера: высокогорная степь на юго‑востоке Алтая
Наземные данные собраны летом и осенью 2022 года, для диплома их предоставил Институт почвоведения и агрохимии СО РАН. Площадки лежат примерно между 49,85° и 50,21° с. ш. и 87,8°-89,0° в. д., в Чуйской межгорной котловине на юго‑востоке Республики Алтай. Для валидации это удобный район, мало облаков, редкая растительность, сухой резко континентальный климат.
Всего было 10 разрезов, от А1 до А10. На большинстве стояло по три термохрона — это автономные логгеры температуры DS-1921 Thermochron размером с таблетку:
датчик «M» лежал на поверхности и писал температуру каждый час, для сравнения с MODIS;
датчик «ML» тоже лежал на поверхности, но писал раз в 4 часа, для сравнения и с MODIS, и с Landsat;
датчик «B» мерил температуру воздуха, как контроль.
На датчиках «M» получилось по 2048 часовых замеров с 15 июля по 8 октября 2022 года на точку. На «ML» и «B» около 630 замеров, до 27 октября. Каждый файл — простенькая таблица Excel из трёх столбцов: дата, время, температура.
Три спутника: либо детальность, либо частота
В работе сравнивались два источника. MODIS — это спектрорадиометр, который стоит сразу на двух спутниках NASA, Terra и Aqua. Landsat 8 — спутник с отдельным тепловым сенсором TIRS. Они по‑разному решают вечный компромисс спутниковой съёмки: либо часто, либо детально.
Terra / MODIS | Aqua / MODIS | Landsat 8 | |
|---|---|---|---|
Продукт в Earth Engine | MOD11A1.061 | MYD11A1.061 | LANDSAT/LC08/C02/T1_L2 |
Размер пикселя | 1 км | 1 км | 30 м (тепловой канал снят в 100 м) |
Как часто снимает | 2 раза в сутки | 2 раза в сутки | раз в 16 суток |
Примерное время съёмки, местное солнечное | ~10:30 и ~22:30 | ~13:30 и ~01:30 | около 10–11 утра |
У MODIS много снимков: можно сравнивать день и ночь, утро и послеобеденный пик. Но один пиксель — это квадрат километр на километр, а датчик на земле видит пятно размером с ладонь. У Landsat пиксель в сотни раз меньше, зато за три месяца над точкой набирается всего несколько безоблачных снимков.
Оба продукта уже прошли атмосферную коррекцию: в пикселе лежит не сырое излучение, а готовая температура поверхности в кельвинах, упакованная в целые числа. Чтобы получить градусы Цельсия, её нужно умножить на коэффициент и сдвинуть. Для MODIS это × 0,02 − 273,15, для Landsat × 0,00341802 + 149 − 273,15. Об эту распаковку легко споткнуться, если не читать описание продукта (она указана в описании выбранного датасета GEE).
Как свести спутник и землю
Раньше такую сверку делали вручную: скачивали снимки, искали пиксель, копировали значения в Excel и подбирали к ним наземные замеры. Я написала модуль на Python, который делает это за один запуск.
Шаг 1. Достать спутниковые данные. Скачивать гигабайты снимков не нужно: Google Earth Engine умеет сам вырезать значение пикселя в нужной точке. Для Aqua это выглядит так:
import ee
ee.Initialize() # тут укажите свой проект в Google в скобках (project='your-project-id')
point = ee.Geometry.Point([88.58833, 50.02446]) # долгота, широта
def to_celsius(img):
lst = img.select('LST_Day_1km').multiply(0.02).subtract(273.15)
return img.addBands(lst, overwrite=True)
col = (ee.ImageCollection('MODIS/061/MYD11A1')
.filterBounds(point)
.filterDate('2022-07-15', '2022-10-08')
.map(to_celsius))
samples = col.map(lambda img: img.sampleRegions(collection=point, scale=1000)).flatten()Вместе с температурой я забирала служебные каналы: Day_view_time (во сколько был снимок), Day_view_angle (под каким углом смотрел сенсор), излучательную способность поверхности и долю безоблачного неба. Пиксели под облаками отсекаются маской качества: у облаков температура верхней кромки, а не земли.
Шаг 2. Найти пары. Для каждого снимка модуль ищет ближайший по времени наземный замер. Если разница во времени укладывается в заданное окно (например, 35 или 120 минут), пара «спутник — земля» идёт в расчёт.
Шаг 3. Посчитать расхождение. Использовала две стандартные метрики:
RMSE показывает, насколько в среднем спутник промахивается, независимо от направления. MBE показывает систематический сдвиг: при отрицательном значении спутник в среднем занижает, при положительном завышает. Если RMSE большой, а MBE близок к нулю, ошибки случайные. Если они почти равны по модулю, спутник ошибается стабильно в одну сторону, и это можно поправить.
Шаг 4. Отчёт. На выходе модуль строит графики, считает регрессию, рисует интерактивную карту на folium и собирает таблицы в Excel и PDF.
Что получилось: спутник верно ловит тренд, но срезает жару
На дневных данных Aqua спутник почти всегда показывал меньше, чем датчик на земле. Ниже — пары «спутник — земля» с окном совпадения 120 минут за июль‑октябрь 2022 года.
На верхнем графике красные точки (спутник) идут ниже синих (земля) практически в каждый день. На нижнем лучше видна суть. Линия регрессии y = 0,71x + 3,77, коэффициент детерминации R² = 0,79.
Что значат эти цифры на практике:
R² = 0,79 — спутник хорошо повторяет изменения. Жаркий день он видит жарким, а осеннее похолодание видно на обоих рядах одинаково.
Наклон 0,71 вместо 1 — спутник сжимает шкалу. Каждый лишний градус на земле он видит как 0,7 градуса.
Из уравнения линии выходит, что при +30 °C на земле спутник в среднем покажет около +25, а при +45 — около +36. Чем жарче, тем сильнее занижение.
Линии пересекаются примерно на +13 °C. В прохладные часы спутник ошибается мало или даже немного завышает.
Итоговые метрики из отчётов модуля (MBE = спутник — земля, минус значит, что спутник занижает):
Источник | Площадка | Окно совпадения | Пар | RMSE, °C | MBE, °C |
|---|---|---|---|---|---|
Landsat 8 | А4 | — | 9 | 1,24 | +0,60 |
Aqua, ночь | А3 | 120 мин | 19 | 2,97 | −1,65 |
Terra, день | А1 | 25 мин | 9 | 3,58 | −2,58 |
Точнее всех оказался Landsat: ошибка чуть больше градуса, и он единственный слегка завышает. MODIS ошибается в 2,5–3 раза сильнее и стабильно занижает: у Terra днём спутник оказался холоднее земли в 8 парах из 9. Это тот же эффект, что на графике Aqua выше, и ещё одно подтверждение, что пиксель в 1 км плохо передаёт нагретую точку.
Честная оговорка: пар немного (9–19), и каждая строка посчитана для своей площадки и своего окна, так что это иллюстрация, а не строгое сравнение спутников. Дневной Aqua и ночной Terra в отчётах диплома не считала.
Для проверки самого модуля я сравнила его с ручной валидацией MODIS, которую выполнила мой научный руководитель Е. А. Мамаш. Её результаты по двум точкам днём и ночью:
Спутник | Точка | Время | Пар | Смещение, °C | RMSE, °C | R² |
|---|---|---|---|---|---|---|
Terra | 2 | день | 22 | -0,92 | 2,47 | 0,64 |
Terra | 3 | день | 21 | -0,09 | 2,53 | 0,63 |
Terra | 2 | ночь | 21 | -1,82 | 2,70 | 0,61 |
Terra | 3 | ночь | 23 | -2,30 | 2,71 | 0,84 |
Aqua | 2 | день | 27 | -1,65 | 3,36 | 0,37 |
Aqua | 3 | день | 21 | -1,50 | 2,45 | 0,73 |
Aqua | 2 | ночь | 24 | -0,80 | 2,84 | 0,53 |
Aqua | 3 | ночь | 22 | -0,85 | 2,09 | 0,73 |
В среднем у Terra смещение -1,28 °C и RMSE 2,60 °C, у Aqua -1,20 °C и 2,68 °C. Картина та же, что у модуля: MODIS ошибается на 2–3,5 градуса и почти всегда занижает. Значит, автоматический расчёт не вносит своей систематической ошибки, а отличия в цифрах объясняются разными точками, окнами совпадения и фильтрами.
Для ориентира: в валидации MODIS Collection 6 по станциям в США, Португалии, Намибии и Китае (Duan et al., Remote Sensing of Environment, 2019) RMSE обычно меньше 2 K, а сравнение с термохронами в Арктике дало RMSE 3,1 °C и смещение -3,4 °C. Мои цифры для горной степи ближе ко второму случаю.
Грабли: где ошибается не спутник, а исследователь
Перерабатывая диплом для статьи, я нашла в своём методе несколько мест, которые сами по себе могут дать расхождение в несколько градусов. Ими стоит поделиться, потому что на них легко наступить в любой подобной работе, да и для себя полезно было вернуться к этому спустя 2 года.
1. Какое время показывает спутник
Это оказался главный затык. Поле Day_view_time в продуктах MODIS хранит местное солнечное время пролёта. Термохроны пишут обычное гражданское время. Алтай живёт по UTC+7, а солнечное время на долготе 88,6° — примерно UTC+5:54. Разница больше часа.
А поверхность утром греется очень быстро. По часовым данным площадки А1 средний прирост между 9 и 10 часами — 6–7 °C за час, и в отдельные дни перепады за час доходят до 18 °C. Если сравнить снимок Terra в 10:30 с замером не того часа, только на этом набежит несколько градусов «ошибки спутника».
В коде для Landsat я переводила время из UTC в UTC+7, а для MODIS сравнивала солнечное время напрямую с часами датчика. Окно совпадения в 120 минут добавляет к этому ещё до двух часов разброса.
2. Фильтры, которые выбрасывают настоящие данные
Чтобы убрать сбои датчиков, я отбрасывала наземные значения вне диапазона 0…50 °C и скачки больше 10 °C между соседними замерами. Звучит разумно, но на Алтае осенью ночью бывает −18 °C. От 6 до 10% часовых замеров на площадках были отрицательными, и фильтр выбрасывал их целиком. Ночное сравнение в сентябре‑октябре фактически шло без самых холодных точек.
Та же история со скачками: на чистой поверхности под солнцем перепад на 10–18 °C за час случался по 7–20 раз за сезон на датчик, и это не сбои, а обычные физические изменения.
Третий фильтр убил: в конце я убирала пары, где разница спутника и земли больше трёх стандартных отклонений. Он выкидывает именно те случаи, где спутник ошибся сильнее всего, и делает RMSE оптимистичнее, чем на самом деле. Для валидации такие пары нужно разбирать, а не удалять.
3. Пиксель это не то же самое, что точка на полигоне
Пиксель MODIS — квадрат 1×1 км. В горной степи в него попадают склоны разной экспозиции, камни, трава и тени. Датчик лежит в одной точке этого квадрата. Даже идеальный спутник покажет среднее по квадрату, а не значение в точке. Для Landsat с пикселем 30 м эта проблема намного мягче, но я тоже снимала значение с масштабом 1000 м, и это стоит переделать на 30.
4. Угол обзора
MODIS снимает полосой шириной 2330 км, поэтому край полосы он видит под углом до 65°. В моих выгрузках встречались углы от -53° до +52°. Под большим углом сенсор смотрит сквозь более толстый слой атмосферы и видит больше склонов и теней. Хорошая практика — сравнить отдельно снимки, снятые почти вертикально (скажем, до 20–30°), и наклонные.
Что говорят профессиональные исследования
Мой диплом — студенческая работа, а этими данными занимаются и специалисты. Мой научный руководитель Е. А. Мамаш (ФИЦ ИВТ) с соавторами проверяли спутниковую температуру на тех же наземных измерениях термохронов из Чуйской котловины за июль‑октябрь 2022 года. Их результаты интересно положить рядом с моими для исследования:
Landsat на тех же данных. В Чуйской котловине получена очень высокая корреляция наземных и спутниковых данных, R > 0,98, для модифицированного алгоритма расчёта Landsat LST. Этот алгоритм не зависит от базы излучательной способности ASTER GED, которая покрывает Россию с пробелами (Мамаш, Пестунов, 2023).
Стандартный продукт Landsat тоже ошибается систематически. По обзору литературы в той же работе, готовый продукт USGS L2SP в большинстве проверок завышает температуру. То есть у разных спутников и продуктов смещение бывает в разные стороны.
MODIS на равнине. Летом 2021 года MODIS проверяли в Новосибирской области, на Предсалаирской равнине, где датчики ставили на ровной однородной поверхности. Коэффициент корреляции там составил больше 0,78.
Вода проще суши. На Обском водохранилище в сентябре 2023 года разница спутниковых и наземных измерений в среднем укладывалась в 1 °C.
Эта картина хорошо сходится с моими выводами. Чем однороднее поверхность и мельче пиксель, тем точнее спутник. Вода — самый простой случай, горная степь под пикселем MODIS в 1 км — один из самых трудных. Для сравнения: мой R² = 0,79 для Aqua соответствует коэффициенту корреляции R ≈ 0,89.
Так можно верить спутнику или нет?
Можно, если понимать, что именно он меряет, и не ждать от него точности термометра в конкретной точке.
Тренды и сравнения — можно. Где теплее, где холоднее, как меняется температура от недели к неделе, спутник показывает хорошо: R² до 0,8 даже в горах.
Абсолютные значения в жару — с поправкой. В моих данных Aqua днём занижал пики на 5–10 °C. Если вам важны именно экстремумы, например для оценки перегрева почвы или пожарной опасности, спутниковые цифры нужно калибровать по земле.
Сравнивать только с поверхностью. С температурой воздуха LST днём расходится на 10–25 °C, и это не ошибка, а разные величины.
Большая часть «ошибки» может быть вашей. Время пролёта, окно совпадения, агрессивные фильтры и размер пикселя способны дать расхождение не меньше, чем сам спутник. Это и показали мои скрипты — сама себе сделала грабли.
Если резюмировать в одну фразу: спутник — хороший свидетель изменений, но плохой свидетель рекордов.
Код и что я сделала бы иначе сейчас
Модуль лежит на GitHub: 11 скриптов на Python (earthengine‑api, pandas, numpy, matplotlib, folium, reportlab), наземные данные в Excel и текст диплома. Писала я его студенткой в 2024 году, сейчас работаю DevOps‑инженером и смотрю на него иначе. Вот что я бы поменяла:
Перевести все времена в UTC до сравнения и хранить часовой пояс явно. Окно совпадения сузить до 30–60 минут, а для часовых данных интерполировать температуру на момент пролёта.
Убрать косметические фильтры. Отбраковывать замеры по флагам качества самого продукта и по явным сбоям датчика, а не по диапазону температур.
Снимать Landsat с масштабом 30 м и добавить фильтр по углу обзора для MODIS.
Считать метрики отдельно по сезонам, по дню и ночи и по каждой площадке, а не одним числом.
Убрать интерактивный ввод через консоль: параметры в конфиг, запуск одной командой.
Упаковать всё в Docker и прогонять пересчёт по расписанию, а результаты складывать в лёгкую базу, а не в россыпь PNG и PDF.
Если вы занимаетесь дистанционным зондированием и видите ошибку в рассуждениях, напишите в комментариях. Буду рада разобрать!
Источники
Мамаш Е. А., Пестунов И. А. Оценка среднемесячных температур озера Байкал в бесснежный период с использованием многовременных данных Landsat LST и MODIS/Terra LST // Материалы 21-й Международной конференции «Современные проблемы дистанционного зондирования Земли из космоса». М.: ИКИ РАН, 2023. С. 37. DOI 10.21046/21DZZconf-2023a.
Мамаш Е. А., Пестунов И. А., Ермаков Н. Б., Кудряшова С. Я., Чумбаев А. С. Анализ многолетней динамики температурного режима Чуйской межгорной котловины (Республика Алтай) на основе данных Landsat // SDM-2023. Новосибирск: ФИЦ ИВТ, 2023. С. 294–304.
Мамаш Е. А., Пестунов И. А., Кудряшова С. Я., Чумбаев А. С. Валидация температурных продуктов MODIS/(TERRA+AQUA) LST с использованием наземных данных // Региональные проблемы дистанционного зондирования Земли. Красноярск, 2022. С. 113–117.
Duan S.‑B. et al. Validation of Collection 6 MODIS land surface temperature product using in situ measurements // Remote Sensing of Environment. 2019. Vol. 225. P. 16–29.
MOD11A1.061 и MYD11A1.061 Land Surface Temperature and Emissivity Daily Global 1km — Earth Engine Data Catalog.
USGS Landsat 8 Level 2, Collection 2, Tier 1 — Earth Engine Data Catalog.
Косинова А. И. Разработка программного модуля для валидации температурных данных КА Landsat и Terra/Aqua на основе наземных измерений. ВКР, ВКИ НГУ, 2024.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.