Google Earth Engine怎么读?城乡规划GIS数据处理实战(附:GEE入门代码集)
《Google Earth Engine怎么读?城乡规划GIS数据处理实战(附:GEE入门代码集)》这篇文章面向刚接触遥感云计算的 GIS 学生、城乡规划从业者和空间数据分析人员,重点解决两个问题:Google Earth Engine 到底怎么读、它在城乡规划 GIS 数据处理中能做什么,以及如何用一组可复制的 GEE 入门代码完成常见分析任务。
引言:Google Earth Engine怎么读,以及为什么规划 GIS 值得学 GEE
Google Earth Engine 通常读作“Google Earth Engine”,中文语境里常简称为“GEE”,读作“G-E-E”或“Gee”都可以。更重要的是理解它的定位:GEE 是一个面向全球尺度遥感与地理空间数据处理的云平台,可以直接调用 Landsat、Sentinel、MODIS、DEM、土地覆盖等海量数据,并在浏览器代码编辑器中完成筛选、计算、可视化和导出。
对城乡规划 GIS 来说,GEE 的价值不在于替代 QGIS、ArcGIS Pro 或 PostGIS,而是补上“快速获取多时相遥感数据、批量计算指数、做区域统计和变化检测”的能力。比如:
- 快速查看某个城市近 10 年建成区扩张趋势。
- 计算规划范围内 NDVI 绿地变化。
- 提取水体、裸地、热岛等环境指标。
- 生成可导入 QGIS 或 ArcGIS Pro 的栅格结果。
- 为国土空间规划、控规评估、生态红线分析提供辅助数据。

背景:城乡规划 GIS 数据处理为什么会遇到 GEE
传统 GIS 工作流通常依赖本地数据:下载影像、解压、投影转换、裁剪、波段计算、分类、统计、制图。这个流程可控,但遇到多年份、多城市、多景影像时,问题会很明显:
- 影像下载量大,动辄几十 GB。
- 不同传感器、不同时间影像的云量差异大。
- 本地电脑处理大范围栅格容易卡顿。
- 重复计算 NDVI、NDBI、NDWI 等指数效率低。
- 规划范围经常变动,裁剪和统计需要反复做。
Google Earth Engine 的思路是把数据和计算放在云端。你不需要先把所有 Landsat 或 Sentinel-2 影像下载到本地,而是在代码中指定时间、范围、云量条件和计算逻辑,由平台返回结果。
在城乡规划场景中,GEE 常用于以下任务:
| 规划问题 | 常用数据 | GEE 处理方式 | 输出结果 |
|---|---|---|---|
| 建成区扩张 | Landsat、Sentinel-2、土地覆盖产品 | 计算 NDBI、分类或对比土地覆盖 | 建成区栅格、变化图、面积统计表 |
| 城市绿地评估 | Sentinel-2、Landsat | 计算 NDVI 并按规划范围统计 | NDVI 图层、均值、分级面积 |
| 水体识别 | Sentinel-2、JRC 水体数据 | 计算 NDWI 或调用水体产品 | 水体范围、变化监测结果 |
| 地表热环境 | Landsat 热红外波段 | 反演地表温度或使用温度产品 | 热岛分布、分区统计 |
原理:GEE 入门必须理解的 5 个核心概念
1. Image:单景影像
Image 可以理解为一张栅格影像,可能包含多个波段。例如 Sentinel-2 的一景影像包含蓝、绿、红、近红外、短波红外等波段。计算 NDVI 时,本质上就是对 Image 的红波段和近红外波段做波段运算。
2. ImageCollection:影像集合
ImageCollection 是一组影像,常用于表达某个数据集在多个时间的影像集合。例如 Sentinel-2 数据集就是一个影像集合。你可以按研究区、时间和云量筛选,再用中位数合成得到一张相对少云的影像。
3. Feature 与 FeatureCollection:矢量对象和矢量集合
Feature 类似一条矢量要素,可以是一个点、一条线或一个面,并带有属性字段。FeatureCollection 是多个矢量要素的集合。城乡规划中的行政区、控规单元、生态红线、建设用地边界都可以作为 FeatureCollection 使用。
4. Reducer:统计器
Reducer 用于统计栅格或属性值,比如求均值、最大值、最小值、总和、频数。规划 GIS 中常见用法是:对某个行政区范围内的 NDVI 求均值,或统计某类土地覆盖的面积。
5. Export:导出结果
GEE 的计算结果通常需要导出到 Google Drive、Google Cloud Storage 或 Earth Engine Asset。对于国内 GIS 学习者来说,常见做法是导出 GeoTIFF 或 CSV,再导入 QGIS、ArcGIS Pro 或 PostGIS 做后续制图与建库。
理解 GEE 的关键不是先背语法,而是把它看成“云端 GIS + 遥感数据仓库 + 批处理脚本”。先明确研究区、数据、时间、指标和导出格式,再写代码会更稳。
步骤:城乡规划 GIS 数据处理的 GEE 入门代码集
步骤 1:定义研究区
最简单的方式是直接在 GEE Code Editor 的地图上绘制一个面,命名为 roi。如果你已经有规划范围,可以把 Shapefile 转为 GeoJSON 或上传为 Earth Engine Asset。
// 示例:使用一个矩形作为研究区
var roi = ee.Geometry.Rectangle([116.20, 39.75, 116.60, 40.05]);
Map.centerObject(roi, 10);
Map.addLayer(roi, {color: 'red'}, '研究区 roi');
如果是正式项目,建议使用真实行政区或规划边界,不要用随手画的矩形代替最终统计范围。
步骤 2:加载 Sentinel-2 影像并筛选少云数据
Sentinel-2 适合城市绿地、水体和建成区识别,空间分辨率较高,常用于城乡规划 GIS 快速分析。下面代码筛选指定时间、研究区和云量条件下的影像。
// Sentinel-2 表面反射率数据
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(roi)
.filterDate('2023-06-01', '2023-09-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20));
print('筛选后的影像数量', s2.size());
这里的 filterBounds 表示按空间范围筛选,filterDate 表示按时间筛选,CLOUDY_PIXEL_PERCENTAGE 表示按云量筛选。对于城市规划分析,通常优先选择植被生长季或目标现象最明显的季节。
步骤 3:做云掩膜并合成影像
只按云量字段筛选还不够,因为一景影像整体云量低,不代表研究区上方没有云。下面使用 Sentinel-2 的 SCL 分类波段进行简单云掩膜。
// 使用 SCL 波段去除云、云影等像元
function maskS2Clouds(image) {
var scl = image.select('SCL');
var mask = scl.neq(3) // 云影
.and(scl.neq(8)) // 中概率云
.and(scl.neq(9)) // 高概率云
.and(scl.neq(10)); // 薄卷云
return image.updateMask(mask)
.divide(10000)
.copyProperties(image, ['system:time_start']);
}
var s2Clean = s2.map(maskS2Clouds);
var composite = s2Clean.median().clip(roi);
Map.addLayer(
composite,
{bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3},
'Sentinel-2 真彩色合成'
);
median() 表示对多景影像取中位数合成,可以降低云、异常值和噪声影响。对于规划底图或环境指标计算,这是一个常用且稳妥的入门方法。
步骤 4:计算 NDVI,用于绿地和植被分析
NDVI 是归一化植被指数,常用于表达植被覆盖状况。在 Sentinel-2 中,近红外波段是 B8,红光波段是 B4。
// NDVI = (NIR - RED) / (NIR + RED)
var ndvi = composite.normalizedDifference(['B8', 'B4']).rename('NDVI');
Map.addLayer(
ndvi,
{min: 0, max: 0.8, palette: ['white', 'yellow', 'green']},
'NDVI 植被指数'
);
在城乡规划 GIS 中,NDVI 可用于辅助识别公园绿地、生态廊道、农田和低植被覆盖区。但要注意,NDVI 不是法定绿地边界,不能直接替代规划用地分类。
步骤 5:计算 NDBI,用于建成区识别辅助
NDBI 是归一化建筑指数,常用于辅助识别建成区。Sentinel-2 中短波红外可使用 B11,近红外使用 B8。
// NDBI = (SWIR - NIR) / (SWIR + NIR)
var ndbi = composite.normalizedDifference(['B11', 'B8']).rename('NDBI');
Map.addLayer(
ndbi,
{min: -0.5, max: 0.5, palette: ['blue', 'white', 'brown']},
'NDBI 建成区指数'
);
NDBI 对裸地、干旱地表和浅色屋顶可能存在混淆,因此更适合做建成区变化的辅助判断,而不是单独作为最终建设用地边界。
步骤 6:计算 NDWI,用于水体识别
NDWI 可用于突出水体信息。一个常见写法是使用绿光波段 B3 和近红外波段 B8。
// NDWI = (GREEN - NIR) / (GREEN + NIR)
var ndwi = composite.normalizedDifference(['B3', 'B8']).rename('NDWI');
Map.addLayer(
ndwi,
{min: -0.5, max: 0.5, palette: ['brown', 'white', 'blue']},
'NDWI 水体指数'
);
如果研究区存在建筑阴影、山体阴影或深色屋顶,NDWI 的水体提取结果可能误判。正式成果建议结合高分影像、现状水系数据或人工校核。
步骤 7:按规划范围统计 NDVI 平均值
规划分析经常需要回答“某个片区绿化水平如何”。可以使用 reduceRegion 对研究区内的 NDVI 进行统计。
var ndviStats = ndvi.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 10,
maxPixels: 1e13
});
print('研究区 NDVI 平均值', ndviStats);
scale 是统计尺度,Sentinel-2 的 10 米波段常用 scale: 10。如果你把尺度设置得过小,计算可能变慢;如果设置得过大,统计结果会变粗。
步骤 8:按阈值提取高植被覆盖区域
如果需要快速生成绿地候选范围,可以用 NDVI 阈值进行二值化。下面示例将 NDVI 大于 0.4 的区域作为高植被覆盖区。
var highVegetation = ndvi.gt(0.4).rename('High_Vegetation');
Map.addLayer(
highVegetation.updateMask(highVegetation),
{palette: ['00AA00']},
'NDVI > 0.4 高植被覆盖区'
);
阈值不是固定标准。南方湿润地区、北方干旱地区、夏季和冬季的 NDVI 差异很大。实际项目应结合样本点、现状用地、影像目视判读和地方经验调整阈值。
步骤 9:计算高植被覆盖面积
面积统计是城乡规划 GIS 中非常常见的输出。GEE 中可以用 ee.Image.pixelArea() 生成每个像元的面积,再与分类结果相乘。
var areaImage = highVegetation.multiply(ee.Image.pixelArea());
var areaStats = areaImage.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: roi,
scale: 10,
maxPixels: 1e13
});
var areaSqm = ee.Number(areaStats.get('High_Vegetation'));
var areaHa = areaSqm.divide(10000);
print('高植被覆盖面积_平方米', areaSqm);
print('高植被覆盖面积_公顷', areaHa);
这个方法适合统计二值栅格的面积。若你统计的是多类别土地覆盖,应使用分组统计或对每一类分别生成掩膜。
步骤 10:导出 GeoTIFF 到 Google Drive
完成计算后,可以把 NDVI、NDBI、NDWI 或分类结果导出为 GeoTIFF,再导入 QGIS 或 ArcGIS Pro 进行符号化、叠加和制图。
Export.image.toDrive({
image: ndvi,
description: 'GEE_NDVI_Planning_Area_2023',
folder: 'GEE_Export',
fileNamePrefix: 'ndvi_planning_area_2023',
region: roi,
scale: 10,
crs: 'EPSG:4326',
maxPixels: 1e13
});
点击运行后,GEE Code Editor 右侧的 Tasks 面板会出现导出任务。需要手动点击 Run,确认参数后才会开始导出。
常见坑:GEE 入门代码能跑,但结果不对怎么办
1. 云量筛选很低,影像还是有云
CLOUDY_PIXEL_PERCENTAGE 是整景影像的云量比例,不代表你的研究区一定无云。解决方法是加入云掩膜,并检查合成影像在研究区内的实际效果。
2. NDVI 结果全是异常值
常见原因是没有对 Sentinel-2 表面反射率数据除以 10000,或者波段选错。使用 COPERNICUS/S2_SR_HARMONIZED 时,反射率通常需要缩放到 0 到 1 附近再显示和分析。
3. 统计面积和本地 GIS 不一致
面积差异常见于投影、分辨率、掩膜和边界精度不同。GEE 中 pixelArea() 会按像元面积计算,但如果导出后在 QGIS 中使用不同投影或重采样方法,面积可能不同。正式统计建议统一坐标系、像元大小和边界数据版本。
4. 导出任务失败
如果导出报错,优先检查:
region是否过大。scale是否设置过细。maxPixels是否过小。- 影像是否存在有效像元。
- Google Drive 文件夹权限和账户状态是否正常。
5. 阈值分类看起来很粗糙
NDVI、NDBI、NDWI 阈值法适合入门和快速筛查,但不适合作为高精度规划成果。正式项目可以结合样本训练、随机森林分类、对象化分割、已有地类数据和人工核查。
方法比较:GEE、QGIS、ArcGIS Pro 在规划 GIS 中怎么分工
| 工具 | 适合任务 | 优势 | 限制 |
|---|---|---|---|
| Google Earth Engine | 多时相遥感处理、指数计算、区域统计、变化检测 | 云端数据丰富,适合批量处理和快速验证 | 需要网络环境和代码基础,制图排版能力有限 |
| QGIS | 成果检查、投影转换、栅格矢量叠加、地图制图 | 开源免费,插件丰富,适合教学和个人项目 | 大范围多时相栅格处理依赖本地硬件 |
| ArcGIS Pro | 规划数据建库、空间分析、制图出图、模型构建 | 工程化能力强,适合单位生产流程 | 授权成本较高,大量遥感数据仍需下载或连接服务 |
| PostGIS | 规划矢量数据管理、空间查询、WebGIS 后端 | 适合多用户、数据库化管理和服务发布 | 遥感栅格批处理不如 GEE 入门直接 |
一个实用的分工方式是:用 GEE 快速处理遥感数据和生成指标,用 QGIS 或 ArcGIS Pro 做成果核查、投影统一和地图表达,用 PostGIS 管理规划矢量数据和支撑 WebGIS 应用。
检查清单:写 GEE 城乡规划分析代码前先确认这些项
- 研究区是否准确:使用正式行政区、控规单元或项目边界,不要用临时草图替代最终边界。
- 时间范围是否合理:绿地分析优先选择植被旺盛期,建成区变化应保持年份季节相近。
- 数据集是否匹配任务:Sentinel-2 适合中高分辨率城市分析,Landsat 更适合长时间序列。
- 云掩膜是否处理:不要只依赖云量字段,要检查研究区内是否仍有云或云影。
- 波段是否选对:NDVI、NDBI、NDWI 的波段组合不能混用不同传感器名称。
- 尺度是否合理:Sentinel-2 常用 10 米或 20 米,Landsat 常用 30 米。
- 阈值是否经过校核:阈值分类必须结合样本、目视判读或已有地类数据验证。
- 导出坐标系是否明确:后续进 QGIS 或 ArcGIS Pro 前,应统一坐标系和像元大小。
- 结果是否可解释:规划汇报中不要只给指数图,要说明数据来源、时间、方法和限制。
FAQ:Google Earth Engine怎么读与 GEE 入门常见问题
Google Earth Engine怎么读?
Google Earth Engine 可以直接读英文名称,也可以简称 GEE。中文交流中常说“用 GEE 处理遥感数据”。如果是在课堂或项目汇报中,建议第一次出现时写完整名称:Google Earth Engine(简称 GEE)。
GEE 是 GIS 软件还是遥感软件?
GEE 更像云端地理空间数据处理平台,既能做遥感影像处理,也能做部分 GIS 空间分析。它不是传统桌面 GIS 软件,不能完全替代 QGIS 或 ArcGIS Pro,但非常适合处理多时相遥感数据。
城乡规划 GIS 初学者应该先学 GEE 还是 QGIS?
如果你完全没有 GIS 基础,建议先学 QGIS 或 ArcGIS Pro,理解坐标系、矢量、栅格、属性表和空间分析。之后再学 GEE,会更容易理解影像筛选、裁剪、统计和导出结果。
GEE 入门代码为什么经常复制后报错?
常见原因包括变量名不一致、研究区没有定义、数据集名称过期、波段名称写错、括号缺失或导出参数不完整。建议从最小代码开始,每写一段就运行一次,不要一次复制大段代码再排查。
GEE 计算出来的 NDVI 可以直接作为绿地率吗?
不建议直接等同。NDVI 表示植被活力和覆盖情况,绿地率是规划管理中的用地指标,两者概念不同。NDVI 可以辅助识别绿地和生态状况,但最终绿地统计应结合现状用地、规划用地和人工核查。
GEE 导出的 GeoTIFF 在 QGIS 中为什么显示位置不对?
通常与坐标系、导出范围、QGIS 工程坐标系或数据本身投影信息有关。导出时建议明确设置 crs,并在 QGIS 中检查图层坐标参考系。如果要做面积统计,最好使用适合本地的投影坐标系。
GEE 可以处理 Shapefile 吗?
可以,但通常需要先上传到 Earth Engine Asset,或转换为 GeoJSON 后导入。上传 Shapefile 时要确保包含 .shp、.shx、.dbf、.prj 等必要文件,并注意字段名不要过长或包含异常字符。
结论:把 GEE 当作城乡规划 GIS 的遥感云处理工具
Google Earth Engine怎么读并不是难点,真正重要的是掌握它在城乡规划 GIS 数据处理中的工作流:确定研究区,筛选合适的遥感数据,进行云掩膜和影像合成,计算 NDVI、NDBI、NDWI 等指标,按规划范围统计结果,最后导出到 QGIS 或 ArcGIS Pro 做制图和成果整理。
对于初学者,建议先从本文的 GEE 入门代码集开始:跑通研究区、影像筛选、指数计算、面积统计和 GeoTIFF 导出这 5 个环节。只要这条链路跑通,再扩展到多年份变化检测、土地覆盖分类、热岛分析和规划评估,就会顺很多。
在实际项目中,请始终记住:GEE 适合快速处理和分析遥感数据,但规划成果需要可验证、可解释、可复核。把 GEE 的效率与桌面 GIS 的制图、数据库的管理能力结合起来,才是更稳妥的城乡规划 GIS 工作方式。