1. 项目概述:为什么我们需要一份GEE数据集“藏宝图”?
如果你正在用Google Earth Engine(GEE)做遥感分析、环境监测或者地理空间研究,那你一定遇到过这个灵魂拷问:我知道GEE很强大,数据海量,但具体到底有哪些数据?我需要的那个特定传感器、特定时间序列、特定处理级别的影像到底存不存在?官方文档翻起来像大海捞针,社区提问又怕问得太基础。这个项目标题——“Google Earth Engine(GEE)最全632个数据集在哪里找?文章末含名称!”——精准地戳中了每一个GEE用户,从新手到老手的共同痛点: 数据发现与检索效率 。
我刚开始用GEE时,为了找一个合适的Landsat地表反射率数据,在官方Catalog里点了半天,结果还是漏掉了关键的“Landsat 8 Collection 2 Tier 1”和“Tier 2”的区别,导致后续分析出了偏差。后来才发现,GEE的数据集并非静态不变,它像一个不断生长的有机体,每年都有大量新数据集加入,旧数据集更新版本(Collection升级)。仅仅知道有“MOD11A2”(地表温度)是不够的,你需要知道现在是“V6.1”版本,其数据结构和质量标志位与旧版有何不同。这份所谓的“632个数据集”清单,其核心价值不在于一个冰冷的数字,而在于它提供了一张 结构化、可检索的“藏宝图” ,让你能系统性地俯瞰GEE的数据生态全貌,快速定位到符合你研究需求的“宝藏”。
这份清单适合所有GEE使用者: 初学者 可以把它当作数据目录来快速了解GEE的能力边界; 进阶用户 可以用它来查漏补缺,探索之前未关注的数据源(比如气象再分析数据、高程模型、人口数据); 资深研究者 则可以关注数据集版本更迭,确保自己脚本的长期稳定性和结果的可重复性。接下来,我将彻底拆解如何找到、理解并高效利用这份清单,以及背后关于GEE数据集的那些你必须知道的“门道”。
2. 核心思路:从官方目录到民间整理的进化之路
2.1 官方数据目录的利与弊
GEE最正统的数据查找途径当然是其 官方数据目录 。这个页面以卡片和列表形式展示了部分精选数据集,并通过搜索框提供检索功能。对于明确知道数据集名称(例如“COPERNICUS/S2_SR”)的用户来说,直接搜索是最快的。官方目录的优势在于权威性和即时性,每个数据集的文档通常包含详细的描述、时间范围、空间分辨率、波段信息以及简短的加载示例代码。
然而,它的缺点也很明显:
- 非全量展示 :首页展示的只是冰山一角,大量数据集需要通过搜索才能发现,如果你不知道确切名称,就无从搜起。
- 缺乏整体视图 :你很难一次性看到所有数据集的分类、数量以及更新情况,无法进行横向对比。
- 检索功能有限 :主要依赖关键词匹配,无法进行复杂的过滤,比如“找出所有空间分辨率高于10米的光学影像数据集”。
正是这些痛点,催生了社区驱动的“数据集清单”项目。有人通过脚本程序性地爬取或调用GEE的API,将整个数据目录的结构化信息导出,整理成一份完整的列表。标题中提到的“632个”就是一个动态统计的数字,它会随着GEE数据仓库的更新而变化。这份清单的本质,是一个 离线化、可排序、可过滤的数据库快照 。
2.2 “632个数据集清单”的诞生与价值
这份清单通常以多种形式存在:
- GitHub仓库 :开发者可能用一个JSON或CSV文件来维护这份列表,并附上生成列表的Python脚本。这保证了透明度和可复现性。
- 在线表格或网页 :例如,一个用GitHub Pages部署的静态网站,将清单以交互式表格呈现,支持按名称、提供商、类别筛选。
- 社区博客文章 :就像这个标题暗示的,一些技术博主会定期整理、更新并发布这份清单,并在文章中提供一些使用心得。
它的核心价值体现在:
- 全景浏览 :一眼看尽GEE的所有数据资产,建立宏观认知。
- 高效检索 :可以在电子表格中使用“查找”功能,或者利用网页的过滤框,快速定位。
- 属性对比 :将不同数据集的波段数、分辨率、时间跨度列在一起,方便进行技术选型。
- 版本追踪 :清单中如果包含数据集ID(如
LANDSAT/LC08/C02/T1_L2),就能清晰看到数据集的Collection版本,避免使用已弃用的旧版。
注意 :任何非官方的清单都存在时效性问题。GEE团队可能随时添加、移除或重命名数据集。因此,最可靠的清单是附带“最后更新日期”并注明数据来源的。在依赖一份清单前,请务必确认其新鲜度。
3. 实操指南:如何找到并利用这份“终极清单”
3.1 寻宝路径:从搜索引擎到代码仓库
既然标题说“在哪里找?”,我们就来一次实战寻宝。通常,你可以通过以下途径发现它:
-
精准搜索 :在搜索引擎或GitHub中使用以下关键词组合进行搜索:
-
Google Earth Engine dataset list full -
GEE all datasets catalog csv -
Earth Engine dataset inventory -
GEE 数据集 列表 完整通常,高质量的清单会出现在GitHub、Medium、Towards Data Science或个人的技术博客上。
-
-
GitHub挖掘 :在GitHub上搜索
earth-engine-datasets或gee-catalog等关键词,按星标数排序,往往能找到被社区广泛认可和维护的项目。 -
社区推荐 :在如“GIS Stack Exchange”、Reddit的
r/remotesensing板块或专业的遥感社群中,经常有用户询问和分享最新的数据集资源,从中可以找到链接。
假设我们找到了一份以CSV格式存储的清单,其列可能包括: Dataset Name (显示名)、 Earth Engine Snippet (在代码中使用的ID)、 Provider (数据提供方,如NASA、USGS、ESA)、 Category (如“遥感影像”、“气候”、“地形”)、 Temporal Resolution (时间分辨率)、 Spatial Resolution (空间分辨率)、 Start Date 、 End Date 等。
3.2 清单解析与核心字段详解
拿到清单后,不要只看名字。关键是要理解每个字段的含义,这决定了你能否正确使用该数据。
-
Earth Engine Snippet (数据集ID) :这是 最重要的字段 ,是你代码中
ee.ImageCollection()或ee.Image()加载数据时使用的字符串。例如:-
“COPERNICUS/S2_SR”代表哨兵2号地表反射率数据。 -
“USGS/SRTMGL1_003”代表SRTM 30米分辨率DEM数据。 - 格式通常是
“提供方/数据集路径”。 务必直接复制这个ID到你的代码中 ,手动输入容易出错。
-
-
Provider (提供方) :帮助你判断数据的权威性和预处理级别。NASA、USGS、ESA等官方机构的数据通常经过严格的校准和验证。大学或研究机构发布的数据集可能更前沿,但需要仔细阅读其文档了解不确定性。
-
Category (类别) :用于快速过滤。常见的类别有:
-
Optical(光学影像):如Landsat, Sentinel-2。 -
Radar(雷达影像):如Sentinel-1。 -
Weather & Climate(气象气候):如ERA5再分析数据。 -
Elevation(高程):如SRTM, ALOS DEM。 -
Land Cover(土地覆盖):如MODIS土地覆盖产品。 -
Social Economic(社会经济):如GPW人口数据。
-
-
Spatial/Temporal Resolution (时空分辨率) :
- 空间分辨率 :例如“10m”、“30m”、“500m”。这直接决定了你的分析尺度。做城市研究可能需要10米的哨兵2号数据,而做全球植被变化监测用500米的MODIS数据更高效。
- 时间分辨率 :例如“daily”、“8-day”、“16-day”、“monthly”。这决定了你能否构建高时间序列。研究洪涝等快速变化现象需要日数据,而研究年际趋势则月数据或合成产品更合适。
-
Start Date / End Date (时间范围) :注意数据集的可用时间。有些历史数据集(如Landsat全系列)可追溯到1970年代,而一些新传感器数据(如Landsat 9)则从近期开始。
End Date为空白通常意味着数据集仍在持续更新。
3.3 从清单到代码:三步数据调用法
找到心仪的数据集ID后,如何在GEE代码编辑器中使用它?遵循以下三步:
第一步:验证与预览 在GEE代码编辑器中,不要急于写处理逻辑。先尝试用最简单的代码加载并预览。
// 示例:加载并预览一个数据集
var dataset = ee.ImageCollection('COPERNICUS/S2_SR'); // 使用清单中找到的ID
print(dataset.first()); // 打印集合中第一景影像的属性,查看波段等信息
Map.addLayer(dataset.first(), {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000}, 'Preview');
这一步可以快速确认数据集是否存在、能否正常加载、以及基本的波段结构。
第二步:空间与时间过滤 GEE的数据集通常是全球范围的长时间序列集合。直接操作整个集合效率极低且容易超限。必须进行过滤。
// 定义感兴趣区域(ROI),例如一个点或一个几何图形
var roi = ee.Geometry.Point([116.4, 39.9]); // 北京
// 或者 ee.Geometry.Rectangle([xmin, ymin, xmax, ymax]);
// 过滤数据集
var filteredCollection = dataset
.filterBounds(roi) // 空间过滤:只保留与ROI相交的影像
.filterDate('2023-06-01', '2023-08-31'); // 时间过滤:只保留2023年夏季的影像
print('Filtered collection size:', filteredCollection.size()); // 查看过滤后还剩多少景
第三步:选择与处理 过滤后的集合可能包含多景影像。你需要决定如何使用它们:是取中位数合成?取最新的一景?还是进行时间序列分析?
// 示例1:计算夏季的中位数合成影像,以去除云和噪声
var medianComposite = filteredCollection.median();
Map.addLayer(medianComposite, {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000}, 'Median Composite');
// 示例2:选取最接近某个日期的一景影像
var image = ee.Image(filteredCollection.sort('system:time_start', false).first()); // 按时间排序取最新一景
完成这三步,你就成功地将清单上的一个条目,变成了你地图上可交互、可分析的图层。
4. 核心数据集类别深度解析与选型建议
一份完整的清单可能包含数百个条目,我们可以将其归为几个核心类别。了解每个类别的“明星数据集”及其适用场景,能让你选型时事半功倍。
4.1 光学遥感影像(主力军)
这是GEE中使用最广泛的数据类型,主要用于植被、水体、城市、农业等监测。
| 数据集名称 (示例ID) | 提供方 | 空间分辨率 | 重访周期 | 关键特性与适用场景 |
|---|---|---|---|---|
Landsat 8/9 Collection 2 ( LANDSAT/LC08/C02/T1_L2 ) | USGS | 30米 (多光谱) | 16天 | 经典之选 。历史长(Landsat系列自1972年起),大气顶层反射率(TOA)和地表反射率(SR)产品齐全,适用于长时间序列土地覆盖变化监测。 注意 :Collection 2是当前主流,其辐射定标和几何校正比Collection 1有显著改进。 |
Sentinel-2 MSI ( COPERNICUS/S2_SR ) | ESA | 10米/20米/60米 | 5天 (双星) | 高分辨率高频次之王 。10米分辨率足以识别农田田块、道路细节。自带云掩膜(QA60波段)。 S2_SR 是地表反射率产品,开箱即用,是进行精细分类、物候提取的首选。 |
MODIS (如 MODIS/006/MOD13Q1 ) | NASA | 250米/500米/1公里 | 16天/8天/每天 | 全球宏观监测利器 。虽然分辨率粗,但时间分辨率极高,产品成熟(如植被指数NDVI/EVI MOD13Q1 ,地表温度 MOD11A2 )。非常适合研究大范围、快速的植被动态、热岛效应、火灾监测。 |
实操心得 :对于大多数区域性的研究, Sentinel-2是起点 。如果研究期早于2015年(哨兵2号发射),或需要更长时间序列,则切换到 Landsat 。如果需要日尺度或全球尺度分析,则使用 MODIS 产品。永远记得检查数据的云量(
cloud cover属性)并进行掩膜。
4.2 雷达遥感影像(穿透云雾的利器)
雷达数据不受光照和天气影响,对地表水分、结构敏感。
| 数据集名称 (示例ID) | 提供方 | 波段/模式 | 关键特性与适用场景 |
|---|---|---|---|
Sentinel-1 SAR GRD ( COPERNICUS/S1_GRD ) | ESA | C波段,VV/VH极化 | 全天候监测核心 。用于洪水淹没范围制图(水体会使后向散射系数急剧下降)、地表形变监测(需干涉处理InSAR)、农业监测(作物生长导致散射变化)。GRD产品是经过多视和地距校正的,相对易于使用。 |
ALOS PALSAR ( JAXA/ALOS/PALSAR/YEARLY/SAR ) | JAXA | L波段 | 森林生物量估算专家 。L波段波长更长,穿透植被冠层能力更强,其后向散射强度与森林地上生物量有较好的相关性。常用于森林碳汇研究。 |
注意事项 :雷达数据的处理比光学数据复杂。使用前需要理解
dB刻度、极化方式、入射角等概念。对于Sentinel-1,通常建议先进行dB转换(10 * log10(image)),再进行地形校正(ee.Terrain包)以减少地形效应的影响。
4.3 气象与气候数据(驱动因子)
这些数据常作为环境变量用于生态、水文模型。
| 数据集名称 (示例ID) | 提供方 | 要素 | 空间分辨率 | 关键特性与适用场景 |
|---|---|---|---|---|
ERA5-Land ( ECMWF/ERA5_LAND/HOURLY ) | ECMWF | 气温、降水、辐射等数十种 | ~9公里 | 高精度再分析数据的标杆 。通过数据同化将观测与模型结合,提供全球一致、长时间序列的小时级数据。是研究蒸散发、土壤湿度、能量平衡的黄金数据源。 |
CHIRPS Daily ( UCSB-CHG/CHIRPS/DAILY ) | UCSB | 降水 | ~5公里 | 针对干旱地区的降水数据 。特别融合了卫星估算和地面站数据,在非洲、南美等站点稀疏地区表现优于其他产品。适用于干旱、洪水监测和农业水文研究。 |
GPM IMERG ( NASA/GPM_L3/IMERG_V06 ) | NASA | 降水 | 0.1度 | 全球降水测量 。提供半小时级的全球降水数据,适用于研究强对流天气、短时洪涝等快速过程。 |
4.4 高程与地形数据(三维基础)
| 数据集名称 (示例ID) | 提供方 | 空间分辨率 | 关键特性与适用场景 |
|---|---|---|---|
SRTM Digital Elevation Data ( USGS/SRTMGL1_003 ) | NASA | 30米 (全球) | 最常用的免费DEM 。覆盖全球南北纬60度之间。用于地形分析(坡度、坡向、山体阴影)、水文分析(汇流累积量、水流方向)。 003 版本是当前最新。 |
NASADEM ( NASA/NASADEM_HGT/001 ) | NASA | 30米 | SRTM的改进版 。利用先进的处理方法修正了SRTM中的一些错误,特别是在山区和水体附近的数据质量更好。是SRTM的替代选择。 |
ALOS World 3D ( JAXA/ALOS/AW3D30/V3_2 ) | JAXA | 30米 | 另一个全球DEM 。在某些区域与SRTM有差异,可以互为参考验证,或用于融合生成更高精度产品。 |
4.5 专题产品与土地覆盖数据(即用型答案)
这些是经过复杂算法处理生成的“成品”数据,可以直接用于分析。
| 数据集名称 (示例ID) | 提供方 | 内容 | 关键特性与适用场景 |
|---|---|---|---|
MODIS Land Cover ( MODIS/006/MCD12Q1 ) | NASA | 年度全球土地覆盖 | 提供从2001年至今的年度土地覆盖分类,包含多种分类方案(IGBP, UMd等)。是分析土地利用变化趋势的基准数据。 |
Global Forest Change ( UMD/hansen/global_forest_change_2023_v1_11 ) | Hansen et al. | 森林覆盖与损失 | 森林变化研究的里程碑数据集 。提供了2000年以来的森林覆盖、损失、增益的30米分辨率数据。被广泛引用。 |
ESA WorldCover ( ESA/WorldCover/v200 ) | ESA | 2020/2021全球土地覆盖 | 基于Sentinel-1和Sentinel-2生成的10米分辨率土地覆盖图,共11个类别。比MODIS产品空间细节丰富得多,适用于区域精细研究。 |
选型建议 :不要盲目追求高分辨率或新产品。 明确你的科学问题 。如果你研究全球尺度过去20年的植被变化趋势,500米的MODIS NDVI产品(
MOD13A1)比10米的Sentinel-2更合适,因为数据量小、处理快、时间序列完整。如果你研究某个城市过去5年的扩张,那么Sentinel-2或Landsat是更好的选择。清单的价值就在于帮你快速完成这种权衡。
5. 高级技巧:超越清单,玩转GEE数据生态
一份静态清单是入口,但真正的GEE高手懂得如何动态地探索和验证数据。
5.1 使用GEE API动态获取数据集元数据
清单可能过时。最可靠的方式是使用GEE的Python API或Code Editor中的 ee.data 模块来动态查询。以下是一个在Code Editor中列出所有数据集ID的示例(注意:此操作可能返回大量结果,仅用于演示原理):
// 注意:此代码可能需要较高权限,且输出非常长,通常用于调试而非日常使用
var datasetList = ee.data.listAssets('projects/earthengine-public/assets');
print(datasetList);
更实用的方法是,如果你知道数据集的父级目录,可以列出其下的子数据集:
// 例如,列出NASA NEX-GDDP气候预测模型下的所有场景
var nasaAssets = ee.data.listAssets('projects/earthengine-public/assets/NASA/NEX-GDDP');
print(nasaAssets);
5.2 理解“ImageCollection”与“Image”的区别
这是GEE数据模型的核心概念,清单中一个ID可能对应其中一种。
-
ImageCollection: 时间序列的容器 。例如COPERNICUS/S2_SR本身就是一个ImageCollection,它包含了自发射以来所有的哨兵2号影像。你需要用.filterDate()、.filterBounds()来获取子集,然后用.median()、.mean()、.mosaic()等方法进行合成,或使用.map()进行逐景处理。 -
Image: 单景的栅格数据 。例如USGS/SRTMGL1_003就是一个全球单一的Image。一些静态的地图产品(如土地覆盖分类图)也以Image形式存在。
在清单中,这通常可以从ID的命名上略窥一二,但最准确的方式还是通过代码 print(ee.ImageCollection(id).size()) 或 print(ee.Image(id).bandNames()) 来验证。
5.3 处理常见数据陷阱与版本迁移
-
Collection版本陷阱 :以Landsat为例,从
Collection 1升级到Collection 2时,数据ID、波段命名、辐射定标参数都发生了变化。如果你的旧脚本使用的是LANDSAT/LC08/C01/T1_SR,现在应该迁移到LANDSAT/LC08/C02/T1_L2。清单如果能注明Collection版本,价值巨大。 始终使用官方推荐的最新Collection版本 ,以确保数据质量和算法的一致性。 -
预处理级别选择 :
- TOA (Top-Of-Atmosphere) :大气顶层反射率,仅做了辐射定标。
- SR (Surface Reflectance) :地表反射率,经过了大气校正,更接近地物的真实反射特性。
- 产品数据 :如NDVI、地表温度等,是进一步计算得到的衍生变量。 对于定量分析,优先选择SR产品或更高层级的产品 。清单中应能区分这些不同级别。
-
空值(Mask)与质量波段(QA) :几乎所有遥感数据集都包含云、云影、冰雪等掩膜信息,或者专门的质量评估波段(QA Band)。例如,Landsat的
QA_PIXEL波段,Sentinel-2的QA60波段。 不进行云掩膜的分析结果很可能是不可靠的 。你必须学会解码这些QA波段。清单虽然不一定会详细说明每个数据集的QA,但会提示你该数据是否有相关质量信息,引导你去查阅官方文档。
6. 实战案例:利用清单快速启动一个植被变化分析项目
假设我们接到一个任务:分析中国长三角地区2018-2023年夏季的植被绿度变化。我们将演示如何利用数据集清单来高效完成数据选型和初步分析。
第一步:定义需求与筛选清单 需求:区域(长三角)、时间(每年夏季6-8月)、指标(植被绿度,用NDVI)、数据(中高分辨率,时间连续)。 打开清单表格,使用筛选功能:
- 类别筛选:
Optical。 - 空间分辨率筛选:
<= 30m。 - 时间范围筛选:
Start Date <= 2018-01-01。 筛选后,候选者集中在 Landsat 8/9 和 Sentinel-2 。
第二步:权衡与选择
- Sentinel-2 (10米) :分辨率高,能看清细节;重访周期短(5天),更容易获得无云影像。但时间序列始于2017年中,对于2018年夏季来说,部分区域早期数据可能仍较少。
- Landsat 8 (30米) :分辨率稍低,但时间序列从2013年开始,完全覆盖需求;16天重访周期,在夏季多云地区,可能难以获得完全无云的影像。 决策 :为了平衡时间连续性和数据质量,我们选择 Sentinel-2 。因为我们的区域是长三角,夏季多云,Sentinel-2更高的重访率意味着有更多机会获取晴空影像。
第三步:编写GEE脚本 从清单中复制Sentinel-2地表反射率产品的ID: COPERNICUS/S2_SR_HARMONIZED (注意:这里用了Harmonized集合,它确保了Sentinel-2A和2B之间辐射一致性)。
// 1. 定义区域和时间
var roi = ee.Geometry.Rectangle([118, 29, 123, 33]); // 长三角大致范围
var years = ee.List.sequence(2018, 2023);
// 2. 定义一个函数,用于计算单一年份夏季的NDVI中位数
var getSummerNDVI = function(year) {
var startDate = ee.Date.fromYMD(year, 6, 1);
var endDate = ee.Date.fromYMD(year, 8, 31);
var collection = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(roi)
.filterDate(startDate, endDate)
// 云掩膜:使用SCL波段(场景分类图),保留植被(4)、裸土(5)、水体(6)
.map(function(image) {
var scl = image.select('SCL');
var mask = scl.eq(4).or(scl.eq(5)).or(scl.eq(6)); // 创建晴空陆地掩膜
return image.updateMask(mask).normalizedDifference(['B8', 'B4']).rename('NDVI');
});
// 计算夏季NDVI中位数,并添加年份属性
var medianNDVI = collection.median().set('year', year);
return medianNDVI;
};
// 3. 映射到所有年份
var ndviCollection = ee.ImageCollection(years.map(getSummerNDVI));
// 4. 可视化
var visParams = {min: -0.2, max: 0.8, palette: ['blue', 'white', 'green']};
Map.centerObject(roi, 7);
Map.addLayer(ndviCollection.filter(ee.Filter.eq('year', 2023)).first(), visParams, 'NDVI 2023');
// 5. 计算区域平均NDVI时间序列(用于图表)
var chart = ui.Chart.image.series({
imageCollection: ndviCollection,
region: roi,
reducer: ee.Reducer.mean(),
scale: 100,
xProperty: 'year'
}).setOptions({
title: '长三角地区夏季平均NDVI年际变化 (2018-2023)',
vAxis: {title: 'NDVI'},
hAxis: {title: 'Year', format: '####'},
lineWidth: 3,
pointSize: 5
});
print(chart);
这个脚本充分利用了清单信息:正确的数据集ID、知道该数据包含 B8 (近红外)和 B4 (红)波段用于计算NDVI,以及知道 SCL 波段可用于质量掩膜。通过年份循环,我们高效地生成了年际的NDVI合成图和时间序列曲线,为后续的变化检测和驱动力分析奠定了基础。
7. 维护与更新:让你的数据知识库永不过时
GEE的数据生态是活的。依赖一份静态清单就像使用一张过时的地图。作为一名专业的GEE用户,你需要建立自己的数据信息维护习惯。
-
建立个人笔记 :用Notion、Obsidian或简单的Markdown文件,为你常用的数据集建立档案。记录下:
- 数据集ID与官方文档链接
- 关键波段名称与用途
- 质量波段(QA)的解码方式
- 一段加载和预处理的示例代码片段
- 你曾遇到过的坑和解决方案 这份个人笔记的价值,远超过任何第三方清单。
-
社区互助 :在GitHub上给那些维护清单的开源项目点星(Star)、提Issue(如发现数据ID已过期)甚至提交Pull Request(PR)进行修正。在Stack Exchange回答问题时,分享你使用某个数据集的技巧。知识的流动会让整个社区,包括你自己,受益。
最终,这份“632个数据集清单”更像是一把钥匙,它为你打开了GEE数据宝库的大门。但宝库里的珍宝如何鉴别、如何组合、如何打磨成你研究中的利器,则需要你带着科学问题,利用官方文档、社区智慧和自己的代码实践去不断探索。记住,在GEE的世界里,最重要的不是你知道有多少数据,而是你知道如何为你手中的问题,找到并用好那一个最合适的数据。

484

被折叠的 条评论
为什么被折叠?



