Google Earth Engine怎么读?城乡规划GIS数据处理实战(附:GEE入门代码集)
Google Earth Engine怎么读?城乡规划GIS数据处理实战(附:GEE入门代码集)这篇文章面向刚接触云端遥感与GIS处理的城乡规划、国土空间规划和GIS学习者:先说清楚 Google Earth Engine 的读法和定位,再用几个能直接复用的 GEE 入门代码,完成行政区影像筛选、NDVI计算、建设用地识别、地表温度提取和结果导出。
Google Earth Engine 通常简称 GEE,英文可读作 “Google Earth Engine”,也常被国内用户直接读作 “G-E-E”。它不是传统桌面GIS软件,而是一个面向全球遥感数据和空间计算的云平台。对城乡规划GIS数据处理来说,GEE最大的价值是:不用先下载几十GB影像,就能在线筛选、计算、制图和导出结果。

引言:Google Earth Engine怎么读,以及它适合解决什么规划问题
很多同学第一次看到 Google Earth Engine,会先问两个问题:Google Earth Engine怎么读?它和 ArcGIS、QGIS 有什么区别?
读法上,完整名称可以按英文读作 “Google Earth Engine”;实际交流中,更多人直接说 “GEE”。如果你在课程、论文汇报或项目沟通中提到它,可以说:“本次遥感数据处理使用 Google Earth Engine,也就是 GEE 平台完成。”
从用途上看,GEE更适合做大范围、多时相、遥感驱动的GIS分析。例如:
- 快速获取某个城市近10年的Landsat或Sentinel影像。
- 计算NDVI、NDBI、MNDWI等规划常用遥感指数。
- 提取城市建设用地扩张趋势。
- 分析城市热岛、裸地、水体、绿地变化。
- 把处理结果导出为GeoTIFF,再进入ArcGIS Pro或QGIS制图。
如果你的任务是小范围精细编辑矢量地块,ArcGIS Pro和QGIS更合适;如果你的任务是跨年份、跨区域处理海量遥感影像,Google Earth Engine会更高效。
背景:城乡规划GIS数据处理中为什么会用到GEE
在城乡规划GIS数据处理中,遥感影像常被用来支持现状识别、用地变化监测、生态空间评价和城市热环境分析。传统流程通常是:
- 在数据网站检索影像。
- 下载原始数据。
- 进行辐射校正、大气校正或云掩膜。
- 裁剪研究区。
- 计算遥感指数。
- 分类、统计、制图。
这个流程的问题是:数据下载慢、预处理步骤多、不同年份影像管理复杂,而且初学者很容易在坐标系、波段名称、影像质量筛选上出错。
Google Earth Engine把大量遥感数据集和空间计算能力放在云端。你只需要在浏览器中写JavaScript代码,就可以调用影像集合、筛选时间和区域、计算指数、显示地图,并把结果导出到Google Drive或云资产中。
对规划类GIS应用来说,GEE常见的数据处理场景包括:
- 城市绿地分析:使用NDVI评估植被覆盖情况。
- 建设用地识别:使用NDBI、监督分类或机器学习分类识别建成区。
- 水体提取:使用MNDWI识别河流、湖泊、水库。
- 热岛分析:使用Landsat热红外波段估算地表温度。
- 时序变化:比较不同年份的城市扩张、绿地减少或水面变化。
原理:GEE入门要理解的三个核心概念
1. Image:单景影像
Image可以理解为一张栅格影像,例如某一天的Landsat影像、一个DEM高程数据,或者一个已经计算好的NDVI结果。它通常包含多个波段。
var image = ee.Image('USGS/SRTMGL1_003');
Map.addLayer(image, {min: 0, max: 3000}, 'SRTM DEM');
2. ImageCollection:影像集合
ImageCollection是多张影像的集合。例如,Landsat 8在某个城市多年拍摄的所有影像,就是一个影像集合。GEE的强大之处就在于可以对影像集合做筛选、排序、合成和批量计算。
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2020-01-01', '2020-12-31')
.filterBounds(geometry);
3. FeatureCollection:矢量要素集合
FeatureCollection类似GIS中的矢量图层,可以是行政区、规划范围、街道边界、样本点或地块。城乡规划GIS数据处理中,常用它来限定研究区、做分区统计或训练分类样本。
var region = ee.FeatureCollection('FAO/GAUL/2015/level2')
.filter(ee.Filter.eq('ADM2_NAME', 'Beijing'));
初学GEE时要特别注意:GEE采用的是延迟计算。代码定义了处理流程,不代表本地立即算完。只有在地图显示、导出、打印统计结果时,平台才会真正执行计算。
步骤:城乡规划GIS数据处理实战代码
步骤1:定义研究区并加载底图
在GEE代码编辑器中,可以直接用左侧绘图工具画一个研究区,也可以加载行政区矢量数据。下面示例假设你已经在地图上画了一个名为 geometry 的研究区。
Map.centerObject(geometry, 10);
Map.addLayer(geometry, {color: 'red'}, '研究区');
如果你需要导入自己的规划范围,可以先把Shapefile压缩为ZIP,再上传到GEE Assets。上传后用类似下面的方式加载:
var region = ee.FeatureCollection('users/your_name/planning_boundary');
Map.centerObject(region, 10);
Map.addLayer(region, {color: 'yellow'}, '规划范围');
步骤2:筛选Sentinel-2影像并做云量过滤
Sentinel-2适合做城市绿地、水体和建设用地分析,空间分辨率较高,常用10米和20米波段。下面代码筛选2023年夏季低云量影像,并合成为中值影像。
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(geometry)
.filterDate('2023-06-01', '2023-09-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20));
var s2Median = s2.median().clip(geometry);
Map.addLayer(
s2Median,
{bands: ['B4', 'B3', 'B2'], min: 0, max: 3000},
'Sentinel-2真彩色'
);
这里使用 median() 是为了降低单景影像中云、阴影和异常值的影响。它适合做一般规划识别,但如果研究区云量很高,还需要更严格的云掩膜。
步骤3:计算NDVI用于城市绿地分析
NDVI是归一化植被指数,常用于识别植被覆盖。公式为:
NDVI = (NIR – Red) / (NIR + Red)
在Sentinel-2中,近红外波段是B8,红光波段是B4。
var ndvi = s2Median.normalizedDifference(['B8', 'B4']).rename('NDVI');
Map.addLayer(
ndvi,
{min: -0.2, max: 0.8, palette: ['brown', 'yellow', 'green']},
'NDVI植被指数'
);
在城乡规划GIS数据处理中,可以把NDVI作为绿地现状识别、生态空间评价或城市开发强度分析的辅助指标。一般来说,NDVI越高,植被覆盖越好;但农田、草地、林地、公园绿地都可能表现为高NDVI,不能仅凭NDVI判断规划用地性质。
步骤4:计算NDBI用于建设用地识别
NDBI是归一化建筑指数,常用于辅助识别建成区。公式为:
NDBI = (SWIR – NIR) / (SWIR + NIR)
在Sentinel-2中,短波红外可使用B11,近红外使用B8。
var ndbi = s2Median.normalizedDifference(['B11', 'B8']).rename('NDBI');
Map.addLayer(
ndbi,
{min: -0.5, max: 0.5, palette: ['blue', 'white', 'red']},
'NDBI建设用地指数'
);
NDBI高值区域通常与建筑、裸地、硬化地表有关。但需要注意,裸土、采矿区、施工区也可能出现较高NDBI。因此在规划分析中,建议把NDBI与NDVI、MNDWI、道路数据、现状用地数据结合使用。
步骤5:提取水体并排除与建设用地混淆的区域
MNDWI是改进归一化水体指数,常用于城市水体提取。Sentinel-2中可以使用绿光B3和短波红外B11。
var mndwi = s2Median.normalizedDifference(['B3', 'B11']).rename('MNDWI');
Map.addLayer(
mndwi,
{min: -0.5, max: 0.8, palette: ['white', 'blue']},
'MNDWI水体指数'
);
var water = mndwi.gt(0.2).selfMask();
Map.addLayer(
water,
{palette: ['0000ff']},
'水体提取结果'
);
阈值 0.2 不是固定标准。不同城市、季节、传感器和水体浑浊度都会影响结果。实际项目中应通过目视解译、样本点或已有水系数据验证阈值是否合理。
步骤6:简单构建建设用地候选区
下面用一个简化规则构建建设用地候选区:NDBI较高、NDVI较低,同时排除明显水体。
var builtCandidate = ndbi.gt(0.05)
.and(ndvi.lt(0.3))
.and(mndwi.lt(0.1))
.selfMask();
Map.addLayer(
builtCandidate,
{palette: ['ff0000']},
'建设用地候选区'
);
这段代码适合用于GEE入门和规划初筛,不建议直接作为正式用地调查成果。正式成果应结合监督分类、样本验证、混淆矩阵、现状调查数据和规划底图。
步骤7:统计研究区内绿地、水体和建设用地面积
面积统计是城乡规划GIS数据处理中的常见需求。GEE中可以使用 ee.Image.pixelArea() 计算像元面积,再按掩膜区域求和。
var pixelArea = ee.Image.pixelArea();
var builtAreaImage = pixelArea.updateMask(builtCandidate);
var builtArea = builtAreaImage.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: geometry,
scale: 10,
maxPixels: 1e13
});
print('建设用地候选区面积平方米', builtArea);
如果要换算成平方公里,可以进一步除以1,000,000:
var builtAreaKm2 = ee.Number(builtArea.get('area')).divide(1000000);
print('建设用地候选区面积平方公里', builtAreaKm2);
有时输出字段名不是 area,而是影像波段名。遇到这种情况,可以先 print(builtArea) 查看返回字典的键名,再修改 get() 中的字段。
步骤8:导出GeoTIFF到Google Drive
当你需要在ArcGIS Pro、QGIS或制图软件中继续处理结果时,可以把GEE结果导出为GeoTIFF。
Export.image.toDrive({
image: builtCandidate,
description: 'built_candidate_2023',
folder: 'GEE_Export',
fileNamePrefix: 'built_candidate_2023',
region: geometry,
scale: 10,
crs: 'EPSG:4326',
maxPixels: 1e13
});
点击运行后,需要到右侧 Tasks 面板手动启动导出任务。导出完成后,可以在Google Drive中下载GeoTIFF,再导入QGIS或ArcGIS Pro进行符号化、矢量化、叠加分析和制图。
常见坑:GEE入门代码为什么跑不出结果
1. 忘记定义geometry
很多GEE入门代码默认存在 geometry,但你复制后直接运行会报错。解决方法是:用地图左上方绘图工具画一个多边形,或把变量名改为你自己的研究区变量。
2. 影像集合筛选后为空
如果时间范围太短、云量限制太严格、研究区太小,可能筛选不到影像。可以先打印影像数量:
print('影像数量', s2.size());
如果结果为0,可以放宽时间范围或把云量阈值从20调整到40。
3. 波段名称用错
不同数据集的波段名称不同。Sentinel-2常用B2、B3、B4、B8、B11;Landsat Collection 2 Level 2常用SR_B2、SR_B3、SR_B4、SR_B5、SR_B6等。复制代码前一定要确认数据集和波段名匹配。
4. 比例尺scale设置不合理
Sentinel-2常用10米或20米,Landsat常用30米。面积统计和导出时,如果 scale 设置过小,会导致计算量过大;如果设置过大,又会损失空间细节。
5. 把指数结果当成最终规划结论
NDVI、NDBI、MNDWI是遥感指数,不等于法定用地分类。它们适合辅助识别和快速分析,但正式规划成果仍需结合用地调查、地形图、地籍数据、规划审批数据和外业核查。
方法比较:GEE、QGIS、ArcGIS Pro在规划GIS中的分工
| 工具 | 适合任务 | 优势 | 限制 |
|---|---|---|---|
| Google Earth Engine | 多时相遥感、指数计算、云端批量处理、区域统计 | 不用大量下载原始影像,适合大范围快速分析 | 需要写代码,细节制图和人工编辑能力较弱 |
| QGIS | 结果检查、矢量叠加、符号化制图、插件分析 | 免费开源,适合教学和日常GIS处理 | 处理超大遥感影像时依赖本机性能 |
| ArcGIS Pro | 专业制图、空间分析、规划成果整合、地理数据库管理 | 制图和数据管理能力强,适合项目成果生产 | 软件授权成本较高,遥感批处理仍需合理组织流程 |
| Python GIS | 自动化处理、批量统计、模型复现、数据清洗 | 适合构建可重复分析流程 | 环境配置和库版本管理对初学者有门槛 |
比较实用的工作流是:在Google Earth Engine中完成遥感影像筛选、指数计算和初步分类;导出GeoTIFF后,在QGIS或ArcGIS Pro中完成叠加分析、成果制图和版面表达。
检查清单:发布规划分析结果前要核对什么
- 研究区是否正确:边界是否为最新行政区或项目范围,是否存在偏移。
- 影像时间是否合理:是否与规划现状年份、季节或调查时间匹配。
- 云量是否可接受:是否存在云、云影、雾霾影响识别结果。
- 波段是否匹配:Sentinel-2、Landsat不同数据集的波段名不能混用。
- 阈值是否验证:NDVI、NDBI、MNDWI阈值应通过样本或目视检查校准。
- 坐标系是否满足后续软件需求:导出结果进入QGIS或ArcGIS Pro后,要检查投影和单位。
- 面积统计单位是否明确:平方米、公顷、平方公里不要混用。
- 成果用途是否说明:遥感指数分析结果适合辅助判断,不应直接替代法定用地数据。
FAQ:Google Earth Engine城乡规划GIS数据处理常见问题
Q1:Google Earth Engine怎么读才比较自然?
完整读法是 “Google Earth Engine”,实际交流中常简称 “GEE”,可以直接读作 “G-E-E”。在中文课堂或项目沟通中,说“用GEE处理遥感影像”通常都能被理解。
Q2:GEE适合零基础GIS学生学习吗?
适合,但建议先掌握基本GIS概念,例如栅格、矢量、坐标系、波段、像元、投影和空间分辨率。GEE代码主要使用JavaScript语法,入门难度低于完整的软件开发,但需要理解遥感数据处理逻辑。
Q3:城乡规划中能不能只用GEE识别建设用地?
不建议只依赖GEE指数阈值识别建设用地。GEE可以快速生成建设用地候选区,但正式规划成果应结合现状用地数据、道路建筑数据、地籍资料、人工判读和外业核查。
Q4:为什么我导出的GeoTIFF在QGIS里看起来很模糊?
常见原因是导出 scale 设置过大,或者使用了分辨率较低的数据源。Sentinel-2常用10米,Landsat常用30米。如果你把Sentinel-2结果按100米导出,细节会明显减少。
Q5:GEE能不能直接导出Shapefile?
可以导出矢量 FeatureCollection,但栅格分类结果通常需要先矢量化,再导出为SHP或GeoJSON。对于大面积分类结果,不建议盲目矢量化,否则文件会很大、边界很碎,后续处理效率也会下降。
Q6:GEE代码中的maxPixels是什么意思?
maxPixels 是允许处理的最大像元数量。大范围、高分辨率导出时,如果像元数量超过默认限制,就可能报错。可以适当增大 maxPixels,但更重要的是合理设置研究区、分辨率和导出范围。
结论:GEE是规划GIS遥感分析的高效入口
Google Earth Engine的正确理解方式,不只是知道它怎么读,而是知道它适合放在城乡规划GIS数据处理流程的哪个位置。它特别适合做多时相遥感影像筛选、NDVI和NDBI等指数计算、城市建设用地初筛、水体识别、热岛分析和区域统计。
对初学者来说,建议从三个动作开始:先定义研究区,再筛选影像,最后计算一个指数并导出结果。等你熟悉GEE入门代码后,再逐步加入云掩膜、分类样本、精度验证和批量年份循环。
记住一个原则:GEE负责快速获取和计算遥感信息,QGIS或ArcGIS Pro负责检查、叠加、制图和成果组织。把两类工具结合起来,才是城乡规划GIS数据处理更稳妥的实践路径。