Google Earth Engine中的Map对象
在Google Earth Engine(GEE)中,Map
对象是用于在交互式地图上显示地理空间数据的核心工具。它允许用户加载影像、矢量数据、图表等内容,并提供地图浏览、图层控制和交互式操作功能。以下是关于 Map
对象的详细介绍:
1. 初始化地图
在GEE代码编辑器中,默认已创建 Map
对象,可通过 Map
直接调用其方法。如果需要手动初始化(例如在自定义UI界面中),可使用:
var map = ui.Map(); // 创建新的地图对象
2. 核心功能与方法
2.1 添加图层
使用 Map.addLayer()
方法将影像、矢量或几何对象添加到地图:
// 示例:加载Landsat影像并显示
var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20140318');
Map.addLayer(image, {bands: ['SR_B4', 'SR_B3', 'SR_B2'], min: 0, max: 0.3}, 'Landsat Natural Color');
• 参数说明:
• 第一个参数:ee.Image
、ee.ImageCollection
或 ee.Geometry
。
• 第二个参数:visParams
(可视化参数,如波段、颜色、透明度等)。
• 第三个参数:图层名称(可选)。
2.2 设置地图视图
• 定位到指定区域:Map.centerObject()
或 Map.setCenter()
。
Map.centerObject(image, 8); // 以影像为中心,缩放级别8
Map.setCenter(116.4, 39.9, 10); // 设置中心坐标(经度、纬度、缩放级别)
• 调整缩放级别:Map.setZoom()
。
Map.setZoom(12);
2.3 图层控制
• 移除图层:Map.remove()
或 Map.layers().remove(layer)
。
var layer = Map.addLayer(image, {}, 'Temp Layer');
Map.remove(layer); // 移除指定图层
• 调整图层顺序:Map.layerPanel().setLayerOrder([layer1, layer2])
。
2.4 叠加几何对象
直接显示点、线、面等几何图形:
var point = ee.Geometry.Point([116.4, 39.9]);
Map.addLayer(point, {color: 'red'}, 'Beijing Point');
3. 高级功能
3.1 动态图层叠加
使用透明度参数 (opacity
) 实现多图层叠加:
var elevation = ee.Image('CGIAR/SRTM90_V4');
Map.addLayer(elevation, {min: 0, max: 4000, palette: ['gray', 'green', 'red']}, 'Elevation', true, 0.5);
• 第五个参数 0.5
表示透明度(0为完全透明,1为不透明)。
3.2 交互式工具
• Inspector工具:点击地图右上角的 Inspector 标签,再点击地图可查看像素值、坐标等信息。
• 绘图工具:通过 Map
的绘图工具栏手动绘制几何图形(需启用 Map.setDrawBarEnabled(true)
)。
3.3 事件监听
监听地图点击、缩放等事件:
// 监听地图点击事件
Map.onClick(function(coords) {
var point = ee.Geometry.Point(coords.lon, coords.lat);
print('Clicked coordinates:', coords);
// 示例:获取该点的NDVI值
var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']);
var value = ndvi.reduceRegion({
reducer: ee.Reducer.first(),
geometry: point,
scale: 30
}).get('nd');
print('NDVI at clicked point:', value);
});
4. 自定义控件与UI
4.1 添加按钮与面板
结合 ui
模块创建交互式控件:
// 创建按钮
var button = ui.Button({
label: 'Clear Layers',
onClick: function() {
Map.layers().reset(); // 清除所有图层
}
});
// 将按钮添加到地图
Map.add(button);
4.2 自定义图例
通过 ui.Panel
和 ui.Label
创建图例:
var legend = ui.Panel({
style: {
position: 'bottom-right',
padding: '8px'
}
});
legend.add(ui.Label('Elevation (m)', {fontWeight: 'bold'}));
var palette = ['gray', 'green', 'red'];
palette.forEach(function(color) {
legend.add(ui.Label('', {backgroundColor: color, margin: '2px'}));
});
Map.add(legend);
5. 示例代码
// 加载Landsat影像并设置可视化参数
var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20140318');
var visParams = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0,
max: 0.3,
gamma: 1.2
};
// 添加影像和几何对象
Map.addLayer(image, visParams, 'Landsat Natural Color');
Map.addLayer(image.normalizedDifference(['SR_B5', 'SR_B4']), {min: -0.2, max: 0.4, palette: ['blue', 'white', 'green']}, 'NDVI');
Map.addLayer(ee.Geometry.Point([116.4, 39.9]).buffer(1000), {color: 'red'}, 'Buffer');
// 设置地图中心和缩放
Map.setCenter(116.4, 39.9, 12);
6. 注意事项
- 客户端与服务器端操作:在事件监听回调中,需使用
ee.
对象(如ee.Geometry.Point
)处理地理数据。 - 性能优化:避免在事件监听中频繁调用
getInfo()
,可能导致延迟。 - 图层命名:为图层提供清晰的名称,便于在图层管理器中识别。
- 默认地图:GEE代码编辑器默认已初始化
Map
对象,无需手动创建。
通过灵活使用 Map
对象的方法和事件,用户可以实现从基础数据展示到复杂交互分析的各类地理空间应用。