Geoskill: MODIS Lst Download
Search and download Terra and Aqua MODIS Land Surface Temperature products (daily and 8-day, 1km) from NASA LAADS DAAC with GeoTIFF output and Earthdata auth.
ruiduobao
@ruiduobao
What This Skill Does
Searches and downloads MODIS Land Surface Temperature (LST) products from NASA LAADS DAAC. Supports Terra and Aqua satellite products (MOD11A1, MOD11A2, MYD11A1, MYD11A2) with daily or 8-day composites, outputs GeoTIFF format, and requires Earthdata authentication.
Replaces manual browsing and downloading from NASA's LAADS DAAC web portal by providing a command-line interface to search, filter, and download LST granules by date range and bounding box.
When to Use It
- Download daily MODIS LST data for a specific region and date range
- Retrieve 8-day composite LST products for time-series analysis
- Search available LST granules by bounding box and product type
- Extract daytime and nighttime land surface temperature layers separately
- List download URLs for MODIS LST products without downloading
- Automate acquisition of Terra and Aqua LST data for research workflows
Install
$ openclaw skills install @ruiduobao/modis-lst-downloadMODIS Land Surface Temperature Download
Search and download MODIS LST products from NASA LAADS DAAC with Earthdata authentication.
Overview
MODIS Land Surface Temperature (LST) products provide per-pixel land surface temperature with 1km spatial resolution. This skill supports both Terra (MOD) and Aqua (MYD) satellite products at daily and 8-day composite intervals.
Products
| Product | Satellite | Temporal | Resolution |
|---|---|---|---|
| MOD11A1 | Terra | Daily | 1km |
| MOD11A2 | Terra | 8-day | 1km |
| MYD11A1 | Aqua | Daily | 1km |
| MYD11A2 | Aqua | 8-day | 1km |
Features
- Day and night LST: separate daytime and nighttime temperature layers
- Quality control: includes QC bands for quality filtering
- Search by date range and bbox: find available granules
- GeoTIFF output: standard georeferenced raster format
- Earthdata authentication: secure access to NASA data
- Fallback URL listing: shows download URLs even without credentials
Authentication
NASA Earthdata requires a free account. To configure:
- Register at https://urs.earthdata.nasa.gov/
- Set environment variables:
export EARTHDATA_USERNAME="your_username" export EARTHDATA_PASSWORD="your_password" - Or use the configure command:
python scripts\modis_lst_download.py configure --username your_username
Usage
# Search for available LST data
python scripts\modis_lst_download.py search \
--product MOD11A1 \
--start 2023-06-01 --end 2023-06-30 \
--bbox 116.0 39.5 116.8 40.2
# Download daily LST (requires Earthdata auth)
python scripts\modis_lst_download.py download \
--product MOD11A1 \
--start 2023-07-01 --end 2023-07-01 \
--bbox 116.0 39.5 116.8 40.2 \
--output ./lst_data/ --layers LST_Day_1km,QC_Day
# Download 8-day composite
python scripts\modis_lst_download.py download \
--product MOD11A2 \
--start 2023-07-01 --end 2023-07-08 \
--bbox 73 18 135 54 \
--output ./china_lst/
# List download URLs without downloading
python scripts\modis_lst_download.py download \
--product MYD11A1 \
--start 2023-08-01 --end 2023-08-01 \
--bbox 116.0 39.5 116.8 40.2 \
--list-only
Parameters
--product: MOD11A1, MOD11A2, MYD11A1, or MYD11A2--start/--end: Date range (YYYY-MM-DD)--bbox: Bounding box aswest south east north--output: Output directory--layers: Comma-separated layer names (LST_Day_1km, LST_Night_1km, QC_Day, QC_Night)--list-only: Only list download URLs, do not download--username: Earthdata username (or set EARTHDATA_USERNAME env var)
Installation
# Install dependencies
pip install requests>=2.28.0 tqdm
# Or install from requirements.txt
pip install -r scripts/requirements.txt
Data Source
- API: NASA LAADS DAAC (https://ladsweb.modaps.eosdis.nasa.gov/)
- Search API: CMR (Common Metadata Repository) via CMR-STAC
- License: Public Domain (NASA open data)
- Rate Limit: No strict limit; recommended max 10 requests/minute
- CRS: Sinusoidal (MODIS native projection)
- Temporal coverage: Terra from 2000-02-24; Aqua from 2002-07-04
- Data latency: ~2 weeks for standard products
Product Citations
- MOD11A1: Wan, Z., S. Hook, and G. Hulley, 2015. MOD11A1 MODIS/Terra Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V006. NASA EOSDIS Land Processes DAAC.
- MOD11A2: Wan, Z., S. Hook, and G. Hulley, 2015. MOD11A2 MODIS/Terra Land Surface Temperature/Emissivity 8-Day L3 Global 1km SIN Grid V006. NASA EOSDIS Land Processes DAAC.
- MYD11A1: Wan, Z., S. Hook, and G. Hulley, 2015. MYD11A1 MODIS/Aqua Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V006. NASA EOSDIS Land Processes DAAC.
- MYD11A2: Wan, Z., S. Hook, and G. Hulley, 2015. MYD11A2 MODIS/Aqua Land Surface Temperature/Emissivity 8-Day L3 Global 1km SIN Grid V006. NASA EOSDIS Land Processes DAAC.
Citation Format
@misc{wan2015mod11a2,
title={MOD11A2 MODIS/Terra Land Surface Temperature/Emissivity 8-Day L3 Global 1km SIN Grid V006},
author={Wan, Z. and Hook, S. and Hulley, G.},
journal={NASA EOSDIS Land Processes DAAC},
year={2015},
doi={10.5067/MODIS/MOD11A2.006}
}
LST Scale Factor
- Raw values: Integer DN (Digital Number)
- Conversion: Multiply by
0.02to get temperature in Kelvin - To Celsius:
T(°C) = DN × 0.02 - 273.15 - Example: DN
15000→ 300.00 K → 26.85°C
QC Band Interpretation
| Bits | Field | Values |
|---|---|---|
| 0-1 | Quality flag | 0=good quality, 1=other quality, 2=cloud contaminated, 3=not produced |
| 2-3 | Emissivity error flag | 0=≤0.01, 1=≤0.02, 2=≤0.04, 3=>0.04 |
| 4-5 | LST error flag | 0=≤1K, 1=≤2K, 2=≤3K, 3=>3K |
Cloud filtering: Keep only pixels where bits 0-1 = 0 (good quality).
8-Day Compositing Algorithm
MOD11A2 composites daily LST values over 8 days using:
- Cloud-free preference: Pixels with no cloud contamination are prioritized.
- Maximum temperature: For overlapping observations, the highest quality LST value is retained.
- QC-driven: Only pixels passing QC checks are included in the composite.
Visualization
- Temperature maps: Load GeoTIFF in QGIS with single-band pseudocolor, apply color ramp (blue→red).
- Time series: Stack multiple dates and plot with matplotlib.
- QC overlay: Use QC band to mask unreliable pixels before visualization.
Troubleshooting
| Error | Cause | Solution |
|---|---|---|
ConnectionError | Network issue or API down | Check internet connection, retry in 1 minute |
HTTP 429 | Rate limit exceeded | Wait 60 seconds before retrying |
HTTP 404 | Invalid parameters or date range | Check parameter names and date format |
ValueError: bbox | Invalid bounding box | Ensure format is west,south,east,north |
| Empty output | No data for query region/time | Try different date range or check coordinates |
ModuleNotFoundError | Missing dependency | Run pip install requests tqdm |
401 Unauthorized | Earthdata auth failed | Check EARTHDATA_USERNAME/PASSWORD or run configure |
Advanced Usage
Batch Time Series Download
# Download every month for a year
for month in $(seq -w 1 12); do
python scripts\modis_lst_download.py download --product MOD11A1 --bbox 116 39.5 117 40.2 --start 2023-${month}-01 --end 2023-${month}-28 --output lst_2023_${month}.tif
sleep 2
done
CI/CD Integration (GitHub Actions)
# .github/workflows/update-modis-lst.yml
name: Update MODIS LST
on:
schedule:
- cron: '0 12 * * *' # Daily
jobs:
download:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install requests
- env:
EARTHDATA_USERNAME: ${{ secrets.EARTHDATA_USER }}
EARTHDATA_PASSWORD: ${{ secrets.EARTHDATA_PASS }}
run: |
python scripts\modis_lst_download.py download \
--product MOD11A1 --bbox 116 39.5 117 40.2 \
--start $(date -d '3 days ago' +%Y-%m-%d) \
--end $(date +%Y-%m-%d) \
--output data/lst_latest.tif
LST Conversion & QC
import rasterio
import numpy as np
with rasterio.open('lst.tif') as src:
raw = src.read(1)
# Convert DN to Celsius: scale factor 0.02, offset 273.15
lst_celsius = raw * 0.02 - 273.15
# QC: use QC band bits 0-1, keep only value 0 (good quality)
PostgreSQL/PostGIS Raster Import
raster2pgsql -s 4326 -I -C lst.tif public.lst_raster | psql -d gis_db
Performance Tips
- Use
--list-onlyfirst to preview URLs, then download in parallel - Add
sleep 2between requests to avoid NASA rate limits - For time series analysis, prefer MOD11A2 (8-day composite) over MOD11A1 to reduce cloud contamination
中文说明
从 NASA LAADS DAAC 搜索和下载 MODIS 地表温度(LST)产品。支持 Terra 和 Aqua 卫星的逐日和 8 天合成产品。
产品列表
| 产品 | 卫星 | 时间分辨率 | 空间分辨率 |
|---|---|---|---|
| MOD11A1 | Terra | 逐日 | 1km |
| MOD11A2 | Terra | 8天合成 | 1km |
| MYD11A1 | Aqua | 逐日 | 1km |
| MYD11A2 | Aqua | 8天合成 | 1km |
核心功能
- 昼夜地表温度:分别获取白天和夜间温度图层
- 质量控制:包含 QC 波段用于质量过滤
- 按日期范围和区域搜索:查找可用数据
- GeoTIFF 输出:标准地理参考栅格格式
- Earthdata 认证:安全访问 NASA 数据
- URL 列表回退:无认证时仍可列出下载链接
认证说明
NASA Earthdata 需要免费账号。配置方法:
- 在 https://urs.earthdata.nasa.gov/ 注册
- 设置环境变量:
set EARTHDATA_USERNAME=your_username set EARTHDATA_PASSWORD=your_password - 或使用 configure 命令:
python scripts\modis_lst_download.py configure --username your_username
使用示例
# 搜索可用 LST 数据
python scripts\modis_lst_download.py search \
--product MOD11A1 \
--start 2023-06-01 --end 2023-06-30 \
--bbox 116.0 39.5 116.8 40.2
# 下载逐日 LST(需要 Earthdata 认证)
python scripts\modis_lst_download.py download \
--product MOD11A1 \
--start 2023-07-01 --end 2023-07-01 \
--bbox 116.0 39.5 116.8 40.2 \
--output ./lst_data/ --layers LST_Day_1km,QC_Day
# 下载 8 天合成产品
python scripts\modis_lst_download.py download \
--product MOD11A2 \
--start 2023-07-01 --end 2023-07-08 \
--bbox 73 18 135 54 \
--output ./china_lst/
# 仅列出下载 URL 不下载
python scripts\modis_lst_download.py download \
--product MYD11A1 \
--start 2023-08-01 --end 2023-08-01 \
--bbox 116.0 39.5 116.8 40.2 \
--list-only
数据来源
- API: NASA LAADS DAAC (https://ladsweb.modaps.eosdis.nasa.gov/)
- 搜索 API: CMR (Common Metadata Repository) via CMR-STAC
- 许可证: 公共领域(NASA 开放数据)
- 引用: Wan, Z., S. Hook, and G. Hulley, 2015. MOD11A2 MODIS/Terra Land Surface Temperature/Emissivity 8-Day L3 Global 1km SIN Grid V006. NASA EOSDIS Land Processes DAAC.
Top skills in this category
self-improving agent
@pskoettCaptures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Claude ('No, that's wrong...', 'Actually...'), (3) User requests a capability that doesn't exist, (4) An external API or tool fails, (5) Claude rea
Skill Vetter
@spclaudehomeSecurity-first skill vetting for AI agents. Use before installing any skill from ClawdHub, GitHub, or other sources. Checks for red flags, permission scope, and suspicious patterns.
Self-Improving + Proactive Agent
@ivangdavilaSelf-reflection + Self-criticism + Self-learning + Self-organizing memory. Agent evaluates its own work, catches mistakes, and improves permanently. Use when...
Proactive Agent
@halthelobsterTransform AI agents from task-followers into proactive partners that anticipate needs and continuously improve. Now with WAL Protocol, Working Buffer, Autonomous Crons, and battle-tested patterns. Part of the Hal Stack 🦞
Agent Browser
@matrixyHeadless browser automation CLI optimized for AI agents with accessibility tree snapshots and ref-based element selection