尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Google Earth Engine 接入 TaoToken:Sentinel-5P 气体监测数据配置与验证

Google Earth Engine 接入 TaoToken:Sentinel-5P 气体监测数据配置与验证 1. 为什么要在 GEE 里接一层统一通道Google Earth Engine 上的 Sentinel-5 Precursor 数据是很多人做空气质量、碳排放、污染溯源分析时的第一站。TROPOMI 这台多光谱传感器从 2018 年 7 月开始持续回传数据能记录臭氧、甲烷、甲醛、气溶胶、一氧化碳、氮氧化物、二氧化硫这几类大气成分的浓度信息空间分辨率做到 0.01 弧度量级还附带云特征。对做环境遥感的人来说这套数据几乎是绕不开的。但真正动手时会遇到一个很现实的问题GEE 的 Python 端、命令行工具、以及你本地跑的分析脚本各自需要一套认证和调用配置。如果你同时在用多个模型服务或数据通道Key 散落在不同文件里改一次要翻好几个地方。我试过把配置集中到一个统一入口后面换环境、换机器、交接给同事都省事很多。这篇就围绕「Sentinel-5P 七类气体数据怎么在 GEE 里加载筛选」这件事给你一套可复制的 TaoToken 统一 Key/API 通道配置骨架再配上波段选择、时间过滤和结果校验的完整动作。适合已经会一点 GEE、但想把调用链路理顺的人。2. TaoToken 前置Key 与通道准备TaoToken 在这里扮演的角色是把你对模型/数据服务的调用统一到一个入口用一个 Key 走通。你不需要在每个脚本里硬编码不同的凭证。先到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 了解整体能力然后进控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。API 基础地址统一用 https://taotoken.net/api 注意这个地址不带 UTM 参数配置里直接写它。创建好 Key 之后建议先确认两件事一是这个 Key 有没有对应你需要的模型或通道权限二是配额和速率限制是否够你跑批量影像。如果你后面要做长期的编码或 Agent 任务可以看 Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它更适合持续性的开发场景。注意Key 只存在本地配置文件或环境变量里不要提交到 Git 仓库。GEE 脚本里也不要明文写 Key。3. 可复制配置settings.json 与 config.toml下面给你两套配置骨架按你用的工具链选一套即可。核心思路是把 base_url、api_key、默认模型/通道、超时这些抽出来业务脚本只读配置。3.1 settings.json适合 Python / Node 脚本{ taotoken: { base_url: https://taotoken.net/api, api_key: sk-your-key-here, timeout_seconds: 60, max_retries: 3, default_channel: general }, gee: { project: your-gee-project-id, default_collection: COPERNICUS/S5P/OFFL/L3_AER_AI, default_band: absorbing_aerosol_index } }读取时用环境变量覆盖 api_key避免明文import json, os with open(settings.json, r, encodingutf-8) as f: cfg json.load(f) cfg[taotoken][api_key] os.environ.get(TAOTOKEN_API_KEY, cfg[taotoken][api_key]) print(cfg[taotoken][base_url])3.2 config.toml适合命令行工具 / 服务端[taotoken] base_url https://taotoken.net/api api_key sk-your-key-here timeout_seconds 60 max_retries 3 default_channel general [gee] project your-gee-project-id default_collection COPERNICUS/S5P/OFFL/L3_AER_AI default_band absorbing_aerosol_indexPython 读取 TOML3.11 内置 tomllibimport tomllib, os with open(config.toml, rb) as f: cfg tomllib.load(f) cfg[taotoken][api_key] os.environ.get(TAOTOKEN_API_KEY, cfg[taotoken][api_key]) print(cfg[gee][default_collection])两套配置的字段含义一致你按项目习惯选。关键是 base_url 固定为 https://taotoken.net/api api_key 走环境变量注入。4. Sentinel-5P 七类数据的加载与筛选这一节是主体。Sentinel-5P 的数据集 ID 有 OFFI 和 NRTI 两种延迟级别NRTI 是近实时OFFL 是离线精处理。做长期分析优先用 OFFL做快速响应可以用 NRTI。下面把七类气体的集合 ID 和常用波段列清楚。气体/指标集合 ID常用波段气溶胶指数COPERNICUS/S5P/OFFL/L3_AER_AIabsorbing_aerosol_index云特征COPERNICUS/S5P/OFFL/L3_CLOUDcloud_fraction 等一氧化碳COPERNICUS/S5P/NRTI/L3_COCO_column_number_density甲醛COPERNICUS/S5P/NRTI/L3_HCHOtropospheric_HCHO_column_number_density二氧化氮COPERNICUS/S5P/NRTI/L3_NO2tropospheric_NO2_column_number_density臭氧COPERNICUS/S5P/NRTI/L3_O3O3_column_number_density二氧化硫COPERNICUS/S5P/NRTI/L3_SO2SO2_column_number_density甲烷COPERNICUS/S5P/OFFL/L3_CH4CH4_column_volume_mixing_ratio_dry_air4.1 气溶胶加载、时间过滤、可视化先拿气溶胶做完整示例这段可以直接贴进 GEE Code Editor 或 Python 端。var collection ee.ImageCollection(COPERNICUS/S5P/OFFL/L3_AER_AI) .select(absorbing_aerosol_index) .filterDate(2019-06-01, 2019-06-06); var band_viz { min: -1, max: 2.0, palette: [black, blue, purple, cyan, green, yellow, red] }; Map.addLayer(collection.mean(), band_viz, S5P Aerosol); Map.setCenter(-118.82, 36.1, 5);这段做了三件事选波段、按日期过滤、取均值后叠加到地图。filterDate的结束日期是不包含的所以写2019-06-06实际只到 6 月 5 日这点容易踩坑。4.2 一氧化碳与甲烷换集合 ID 即可一氧化碳把集合换成COPERNICUS/S5P/NRTI/L3_CO波段换成CO_column_number_densityvar co ee.ImageCollection(COPERNICUS/S5P/NRTI/L3_CO) .select(CO_column_number_density) .filterDate(2020-01-01, 2020-02-01); var co_viz { min: 0, max: 0.05, palette: [black, blue, green, yellow, red] }; Map.addLayer(co.mean(), co_viz, S5P CO);甲烷用COPERNICUS/S5P/OFFL/L3_CH4波段CH4_column_volume_mixing_ratio_dry_air它的可用起始时间是 2019-02-08比其它几类晚筛选时注意别把空区间传进去。4.3 臭氧、二氧化氮、二氧化硫、甲醛这四类都在 NRTI 下波段名分别是O3_column_number_density、tropospheric_NO2_column_number_density、SO2_column_number_density、tropospheric_HCHO_column_number_density。批量加载时可以写个循环import ee ee.Initialize() gases { O3: (COPERNICUS/S5P/NRTI/L3_O3, O3_column_number_density), NO2: (COPERNICUS/S5P/NRTI/L3_NO2, tropospheric_NO2_column_number_density), SO2: (COPERNICUS/S5P/NRTI/L3_SO2, SO2_column_number_density), HCHO: (COPERNICUS/S5P/NRTI/L3_HCHO, tropospheric_HCHO_column_number_density), } for name, (cid, band) in gases.items(): col (ee.ImageCollection(cid) .select(band) .filterDate(2021-06-01, 2021-06-10)) print(name, col.size().getInfo())col.size().getInfo()会返回区间内的影像数量这是最直接的校验动作。如果返回 0先检查日期区间和集合 ID 是否匹配。4.4 云过滤别忽略这一步Sentinel-5P 的云特征集合COPERNICUS/S5P/OFFL/L3_CLOUD里有cloud_fraction做浓度分析前建议先按云量过滤否则均值会被云污染。简单做法是给主集合加一个质量掩膜或者单独统计云量再决定是否剔除。5. 验证请求与成功结果配置和数据都就位后怎么确认整条链路是通的分两层验证。第一层验证 TaoToken 通道。用 curl 打一次基础请求curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:your-model,messages:[{role:user,content:ping}]}返回里有正常的 JSON 结构说明 Key 和 base_url 没问题。如果返回 401检查 Key返回 404检查路径拼接。第二层验证 GEE 数据读取。跑上面 4.3 的循环看每类气体的影像数量是否大于 0。再取一景做波段统计img ee.ImageCollection(COPERNICUS/S5P/OFFL/L3_AER_AI) \ .select(absorbing_aerosol_index) \ .filterDate(2019-06-01, 2019-06-06) \ .mean() stats img.reduceRegion( reduceree.Reducer.minMax(), geometryee.Geometry.Point([-118.82, 36.1]), scale1000, maxPixels1e9 ) print(stats.getInfo())返回里能看到 min 和 max 两个值说明影像加载、波段选择、区域统计都正常。这一步跑通你的气体监测读取流程就算搭起来了。6. 本篇常见错排查报错一Collection.loadTable: Collection is empty多半是日期区间写反了或者结束日期等于起始日期。filterDate是左闭右开结束日期要往后推一天。报错二Image.select: Band xxx not found波段名拼错或者集合 ID 和波段不匹配。比如把absorbing_aerosol_index用到 CO 集合上就会报这个。对照第 4 节的表格核对。报错三EEException: Not signed upGEE 项目没注册或没初始化。先跑ee.Authenticate()再ee.Initialize(projectyour-project-id)。报错四TaoToken 返回 429触发了速率限制。在配置里把max_retries调大或者降低并发。长期高频任务建议走 Coding Plan。报错五甲烷集合返回 0 景甲烷可用起始时间是 2019-02-08如果你筛的是 2018 年自然是空的。换到 2019 年之后。排障时优先看 API Keys 页面确认 Key 状态接入细节看接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想直接验证模型通道是否正常可以用模型对话 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 快速试一次。7. 把通道固定下来后面只改业务整套流程跑通之后你会发现真正需要动的只有业务部分换日期、换区域、换气体类型。TaoToken 的 base_url 和 Key 固定在配置文件里GEE 的集合 ID 和波段名按第 4 节的表格查验证动作就是看影像数量和波段统计。如果你后面要接 Claude Code 或做 Anthropic 相关的编码任务可以走 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite 这个入口配置逻辑和上面一致只是通道不同。长期做气体监测数据流水线的话把 settings.json 或 config.toml 纳入版本管理Key 走环境变量换机器时复制配置就能继续跑这是我实测下来最省心的做法。
返回列表