Earthdata Search API完全手册:轻松集成NASA地球科学数据到你的应用

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提供了强大的空间搜索功能:

  • 区域搜索APIGET /regions- 搜索特定地理区域的数据
  • 形状文件支持POST /shapefilesGET /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端点(无需认证)

端点方法描述实现文件
/autocompletePOST自动完成搜索建议serverless/src/autocomplete/handler.js
/scale/{concept_type}/{concept_id}GET缩放图像serverless/src/scaleImage/handler.js
/regionsGET区域搜索serverless/src/regionSearch/handler.js
/decodeGETID解码serverless/src/decodeId/handler.js
/colormaps/{product}GET获取颜色映射serverless/src/getColorMap/handler.js

需要认证的API端点

端点方法描述实现文件
/graphqlPOSTGraphQL查询serverless/src/graphQl/handler.js
/collectionsPOST集合搜索serverless/src/collectionSearch/handler.js
/granulesPOST数据粒度搜索serverless/src/cmrGranuleSearch/handler.js
/granules/timelinePOST时间线搜索serverless/src/timelineSearch/handler.js
/retrievalsPOST/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令牌。认证流程包括:

  1. 用户认证:通过URS系统获取认证令牌
  2. 令牌验证:API验证令牌的有效性
  3. 授权检查:检查用户对请求数据的访问权限

认证相关的代码位于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

🔍 调试与故障排除

常见问题解决

  1. 认证失败:确保使用有效的JWT令牌,并检查令牌是否已过期
  2. 数据访问限制:某些数据集可能需要特殊权限,检查错误消息中的详细信息
  3. API限制:如果遇到速率限制,考虑实现请求队列和重试机制
  4. 数据格式问题:确保请求参数格式正确,特别是日期和时间格式

调试工具

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),仅供参考