Earthdata Search API完全手册:轻松集成NASA地球科学数据到你的应用
【免费下载链接】earthdata-searchEarthdata Search is a web application developed by NASA EOSDIS to enable data discovery, search, comparison, visualization, and access across EOSDIS' Earth Science data holdings.项目地址: https://gitcode.com/gh_mirrors/ea/earthdata-search
你是否曾经想要在自己的应用中集成NASA的地球科学数据,却不知道从何入手?🌍 Earthdata Search API就是你的完美解决方案!作为NASA EOSDIS开发的官方数据搜索平台,Earthdata Search提供了强大的API接口,让你能够轻松访问数以百万计的地球科学数据集。本文将为你详细介绍如何使用Earthdata Search API,快速将NASA的地球科学数据集成到你的应用程序中。
🚀 什么是Earthdata Search?
Earthdata Search是由NASA地球观测系统数据和信息系统(EOSDIS)开发的Web应用程序,用于实现跨EOSDIS地球科学数据资产的数据发现、搜索、比较、可视化和访问。它建立在多个面向公众的服务之上,包括用于数据发现和访问的通用元数据存储库(CMR)、EOSDIS用户注册系统(URS)认证、用于可视化的全球图像浏览服务(GIBS),以及数据提供商托管的多个OPeNDAP服务。
通过Earthdata Search API,你可以访问NASA收集的各种地球科学数据,包括气候数据、卫星图像、大气观测等,这些数据对于科学研究、环境监测、天气预测等应用至关重要。
📡 Earthdata Search API核心功能
1. 数据搜索与发现API
Earthdata Search提供了丰富的API端点,让你能够搜索和发现NASA的地球科学数据集:
- 集合搜索API:通过
/collections端点搜索数据集集合 - 数据粒度搜索API:通过
/granules端点搜索具体的数据粒度 - 时间线搜索API:通过
/granules/timeline端点获取数据时间线信息
这些API端点位于serverless/src/collectionSearch/handler.js、serverless/src/cmrGranuleSearch/handler.js和serverless/src/timelineSearch/handler.js中实现。
2. GraphQL数据查询
Earthdata Search支持GraphQL查询,提供了更灵活的数据查询能力。通过/graphql端点,你可以执行复杂的查询来获取精确需要的数据:
// 示例GraphQL查询 { collections { id title description temporalRange { startDate endDate } spatialCoverage { boundingBox } } }GraphQL处理器位于serverless/src/graphQl/handler.js,它作为CMR GraphQL服务的代理,提供统一的查询接口。
3. 数据检索与订单管理
Earthdata Search API允许你提交数据检索请求并管理订单:
- 提交检索请求:
POST /retrievals - 获取检索状态:
GET /retrievals/{id} - 删除检索请求:
DELETE /retrievals/{id} - 获取检索列表:
GET /retrievals
这些功能对于批量处理大量数据请求特别有用,相关实现可以在serverless/src/submitRetrieval/handler.js和serverless/src/getRetrieval/handler.js中找到。
4. 空间数据搜索
Earthdata Search提供了强大的空间搜索功能:
- 区域搜索API:
GET /regions- 搜索特定地理区域的数据 - 形状文件支持:
POST /shapefiles和GET /shapefiles/{id}- 上传和获取形状文件
区域搜索功能在serverless/src/regionSearch/handler.js中实现,形状文件支持在serverless/src/saveShapefile/handler.js和serverless/src/getShapefile/handler.js中提供。
🔧 快速开始指南
步骤1:获取认证令牌
要使用Earthdata Search API,首先需要获取认证令牌。Earthdata Search使用NASA的Earthdata Login(URS)系统进行身份验证:
# 获取JWT令牌 curl -X POST https://urs.earthdata.nasa.gov/oauth/token \ -d "grant_type=client_credentials" \ -u "your_client_id:your_client_secret"步骤2:搜索数据集
使用认证令牌搜索NASA的地球科学数据集:
# 搜索包含"temperature"关键词的数据集 curl -X POST https://search.earthdata.nasa.gov/collections \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "keyword": "temperature", "temporal": "2023-01-01T00:00:00Z,2023-12-31T23:59:59Z", "spatial": { "bounding_box": "-180,-90,180,90" } }'步骤3:获取数据粒度信息
获取特定数据集中的数据粒度信息:
# 获取数据集中的数据粒度 curl -X POST https://search.earthdata.nasa.gov/granules \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "collection_concept_id": "C123456789-PROVIDER", "page_size": 10, "page_num": 1 }'步骤4:提交数据检索请求
提交数据检索请求以获取实际的数据文件:
# 提交数据检索请求 curl -X POST https://search.earthdata.nasa.gov/retrievals \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "collections": [ { "id": "C123456789-PROVIDER", "granules": [ { "id": "G123456789-PROVIDER" } ] } ] }'🌐 API端点详解
公开API端点(无需认证)
| 端点 | 方法 | 描述 | 实现文件 |
|---|---|---|---|
/autocomplete | POST | 自动完成搜索建议 | serverless/src/autocomplete/handler.js |
/scale/{concept_type}/{concept_id} | GET | 缩放图像 | serverless/src/scaleImage/handler.js |
/regions | GET | 区域搜索 | serverless/src/regionSearch/handler.js |
/decode | GET | ID解码 | serverless/src/decodeId/handler.js |
/colormaps/{product} | GET | 获取颜色映射 | serverless/src/getColorMap/handler.js |
需要认证的API端点
| 端点 | 方法 | 描述 | 实现文件 |
|---|---|---|---|
/graphql | POST | GraphQL查询 | serverless/src/graphQl/handler.js |
/collections | POST | 集合搜索 | serverless/src/collectionSearch/handler.js |
/granules | POST | 数据粒度搜索 | serverless/src/cmrGranuleSearch/handler.js |
/granules/timeline | POST | 时间线搜索 | serverless/src/timelineSearch/handler.js |
/retrievals | POST/GET | 检索管理 | serverless/src/submitRetrieval/handler.js |
🛠️ 高级功能与集成
1. 数据可视化集成
Earthdata Search API与GIBS(全球图像浏览服务)集成,支持数据可视化:
// 获取颜色映射用于数据可视化 const response = await fetch('https://search.earthdata.nasa.gov/colormaps/MODIS_Aqua_CorrectedReflectance_TrueColor'); const colormap = await response.json();颜色映射功能在serverless/src/getColorMap/handler.js中实现。
2. 项目和数据管理
Earthdata Search提供了项目和数据管理功能:
- 保存项目:
POST /projects- 保存搜索项目 - 获取项目:
GET /projects/{id}- 获取特定项目 - 获取项目列表:
GET /projects- 获取用户的所有项目
项目管理功能在serverless/src/saveProject/handler.js和serverless/src/getProject/handler.js中实现。
3. 数据导出功能
Earthdata Search支持将搜索结果导出为CSV格式:
# 导出搜索结果 curl -X POST https://search.earthdata.nasa.gov/collections/export \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "collections": ["C123456789-PROVIDER"], "format": "csv" }'数据导出功能在serverless/src/exportSearch/handler.js中实现。
🔒 安全与认证
Earthdata Search API使用NASA的Earthdata Login(URS)系统进行认证。所有需要认证的API端点都需要有效的JWT令牌。认证流程包括:
- 用户认证:通过URS系统获取认证令牌
- 令牌验证:API验证令牌的有效性
- 授权检查:检查用户对请求数据的访问权限
认证相关的代码位于serverless/src/edlAuthorizer/handler.js和serverless/src/edlOptionalAuthorizer/handler.js。
📊 错误处理与日志记录
Earthdata Search API提供了完善的错误处理和日志记录机制:
- 错误日志记录:
POST /error_logger- 记录客户端错误 - 警报日志记录:
POST /alert_logger- 记录系统警报 - 相关性日志记录:
POST /relevancy_logger- 记录搜索相关性信息
这些日志功能帮助NASA监控API使用情况并改进服务质量,相关实现可以在serverless/src/errorLogger/handler.js和serverless/src/alertLogger/handler.js中找到。
🚀 最佳实践
1. 使用分页提高性能
当处理大量数据时,始终使用分页:
{ "page_size": 50, "page_num": 1 }2. 缓存常用数据
对于不经常变化的数据(如元数据信息),考虑在客户端实现缓存机制以减少API调用。
3. 处理速率限制
Earthdata Search API可能有速率限制,确保你的应用程序能够优雅地处理429(Too Many Requests)响应。
4. 使用异步处理
对于大型数据检索请求,使用异步处理模式:
// 提交检索请求 const retrievalResponse = await fetch('/retrievals', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN' }, body: JSON.stringify(retrievalRequest) }); // 定期检查状态 const retrievalId = retrievalResponse.id; const statusResponse = await fetch(`/retrievals/${retrievalId}`);🌟 实际应用场景
1. 气候研究应用
使用Earthdata Search API获取气候数据,构建气候分析和预测工具:
import requests # 获取气候数据集 response = requests.post( 'https://search.earthdata.nasa.gov/collections', headers={'Authorization': 'Bearer YOUR_TOKEN'}, json={ 'keyword': 'climate', 'temporal': '2020-01-01T00:00:00Z,2023-12-31T23:59:59Z' } ) # 处理气候数据 climate_data = response.json()2. 环境监测仪表板
集成Earthdata Search API创建实时环境监测仪表板:
// 获取实时环境数据 async function getEnvironmentalData(region, timeRange) { const response = await fetch('https://search.earthdata.nasa.gov/granules', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ spatial: { bounding_box: region }, temporal: timeRange, collections: ['environmental-monitoring-collections'] }) }); return response.json(); }3. 科学研究数据管道
构建自动化数据管道,定期获取NASA的最新科学数据:
#!/bin/bash # 自动化数据获取脚本 TOKEN="your_jwt_token" DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # 获取最新数据 curl -X POST https://search.earthdata.nasa.gov/granules \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"temporal\": \"$DATE/P1D\", \"collections\": [\"your-collection-id\"] }" > latest_data.json🔍 调试与故障排除
常见问题解决
- 认证失败:确保使用有效的JWT令牌,并检查令牌是否已过期
- 数据访问限制:某些数据集可能需要特殊权限,检查错误消息中的详细信息
- API限制:如果遇到速率限制,考虑实现请求队列和重试机制
- 数据格式问题:确保请求参数格式正确,特别是日期和时间格式
调试工具
Earthdata Search提供了多种调试工具:
- 错误日志API:记录和报告问题
- 详细的错误响应:API返回详细的错误信息帮助诊断问题
- 文档和示例:参考官方文档和示例代码
📈 性能优化建议
1. 批量请求优化
对于多个相关请求,考虑使用批处理:
// 批量获取多个数据集信息 const batchRequests = collectionIds.map(id => fetch(`/concepts/${id}`, { headers: { 'Authorization': 'Bearer YOUR_TOKEN' } }) ); const responses = await Promise.all(batchRequests);2. 数据缓存策略
实现智能缓存策略减少重复请求:
class EarthdataCache { constructor() { this.cache = new Map(); this.ttl = 3600000; // 1小时 } async getData(key, fetchFunction) { const cached = this.cache.get(key); if (cached && Date.now() - cached.timestamp < this.ttl) { return cached.data; } const data = await fetchFunction(); this.cache.set(key, { data, timestamp: Date.now() }); return data; } }3. 连接复用
保持HTTP连接复用以减少连接建立开销:
// 使用连接池 const https = require('https'); const agent = new https.Agent({ keepAlive: true }); // 在请求中使用相同的agent const response = await fetch(url, { agent });🎯 总结
Earthdata Search API为开发人员提供了访问NASA地球科学数据的强大接口。通过本文的介绍,你应该已经了解了:
- Earthdata Search API的基本架构和核心功能
- 如何认证和使用API端点
- 各种数据搜索和检索方法
- 高级功能如数据可视化和项目管理
- 最佳实践和性能优化技巧
无论你是构建气候研究工具、环境监测系统,还是科学数据分析平台,Earthdata Search API都能为你提供可靠的数据支持。开始探索NASA的地球科学数据宝库,为你的应用程序注入来自太空的洞察力!🚀
记住,NASA的地球科学数据是免费开放的,通过Earthdata Search API,你可以轻松访问这些宝贵资源,推动科学研究和创新应用的发展。
【免费下载链接】earthdata-searchEarthdata Search is a web application developed by NASA EOSDIS to enable data discovery, search, comparison, visualization, and access across EOSDIS' Earth Science data holdings.项目地址: https://gitcode.com/gh_mirrors/ea/earthdata-search
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考