Google Earth Engine怎么读?城乡规划GIS数据处理实战(附:GEE入门代码集)

编程与开发
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

《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 的栅格结果。
  • 为国土空间规划、控规评估、生态红线分析提供辅助数据。
Google Earth Engine怎么读与GEE入门代码在城乡规划GIS数据处理中的流程
GEE 在城乡规划 GIS 中的典型流程:获取遥感影像、计算指标、统计规划范围、导出结果到桌面 GIS。

背景:城乡规划 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 工作方式。