地理空间数据分析是一个专门领域,用来处理、可视化和分析一种特殊类型的数据:地理空间数据。与正常数据相比,地理空间数据是带有附加列:位置信息(比如纬度和经度)的表格数据。
有两种主要类型的数据:矢量数据和栅格数据。在处理矢量数据时,您仍有一个表格数据集,而栅格数据更类似图像,比如卫星图像和航空照片。
本文将重点介绍Google Earth Engine提供的栅格数据,这个云计算平台提供了庞大的卫星图像数据目录。这类数据很容易使用一个名为Geemap的Python软件包从Jupyter Notebook加以处理。
Google Earth Engine简介
在开始使用Python库之前,我们需要了解Google Earth Engine的潜力。这个基于云的平台由谷歌云平台提供支持,托管学术、非营利和商业目的的公共和免费地理空间数据集。
这个平台的魅力在于,它提供了存储在Earth Engine服务器上的多PB的栅格数据和矢量数据目录。您可以从这个链接:https://developers.google.com/earth-engine/datasets/catalog快速浏览一下。此外,它还提供了方便分析栅格数据集的API。
Geemap是一个Python库,便于分析和可视化来自Google Earth Engine的大量地理空间数据。
在这个软件包出现之前,我们已经可以通过JavaScript和Python API进行计算请求,但Python API功能有限,且缺少文档。
为了填补这个空白,Geemap应运而生,允许用户通过几行代码访问Google Earth Engine的资源。Geemap建立在eartenengine-api、ipyleaflet和folium的基础上。
欲安装该库,只需执行以下命令:
pip install geemap
建议您在Google Colab中试用这个出色的软件包,以了解其全部潜力。看看这本由教授Qiusheng Wu博士撰写的介绍Geemap和Google Earth Engine使用入门的图书。
如何访问Earth Engine?
首先,我们需要导入将在本教程中用到的两个Python库
import ee
Import geemap
- 除了Geemap外,我们还导入了名为ee的Earth Engine Python客户端库。
这个Python库可以用于Earth Engine上进行身份验证,但直接使用Geemap库可以更快:
m = geemap.Map()
m
您需要点击这行代码返回的URL,这将生成授权码。首先选择云项目,然后点击“GENERATE TOKEN”按钮。
之后,它会要求您选择帐户。建议您使用Google Colab的同一个帐户。
然后,点击“Select All”旁边的复选框,并按“Continue”按钮。简而言之,这一步允许笔记本客户端访问Earth Engine帐户。
在这个操作之后,将生成身份验证码,您可以将其粘贴到笔记本单元格中。
一旦输入了验证码,您就可以最终创建并可视化这个交互式地图了:
m = geemap.Map()
m
眼下,您就可以在ipyleaflet上查看基本地图了,这个Python软件包可以在Jupyter Notebook中可视化交互式地图。
创建交互式地图
前面,我们已经看到了如何使用单单一行代码对交互式地图进行身份验证和可视化。现在,我们可以通过指定质心的纬度和经度、缩放级别和高度来定制默认地图。我选择了罗马的坐标作为欧洲地图上的中心。
m = geemap.Map(center=[41, 12], zoom=6, height=600)
m
如果我们想要改变基础地图,有两种方法。第一种方法是编写并运行以下代码行:
m.add_basemap("ROADMAP")
m
另一种方法是,您可以通过点击位于右侧的环扳手图标手动更改基础地图。
此外,我们看到Geemap提供的基础地图列表:
basemaps = geemap.basemaps.keys()
for bm in basemaps:
print(bm)
输出如下:
OpenStreetMap
Esri.WorldStreetMap
Esri.WorldImagery
Esri.WorldTopoMap
FWS NWI Wetlands
FWS NWI Wetlands Raster
NLCD 2021 CONUS Land Cover
NLCD 2019 CONUS Land Cover
...
正如您所注意到的,有一长串基础地图,其中大部分都是通过OpenStreetMap、ESRI和USGS获得的。
Earth Engine数据类型
在展示Geemap的全部潜力之前,有必要了解Earth Engine中的两种主要数据类型。查看Google Earth Engine的文档以了解更多细节。
在处理矢量数据时,我们主要使用三种数据类型:
- 几何形状(Geometry)存储在地图上绘制矢量数据所需的坐标。Earth Engine支持三种主要类型的几何形状:点、线串和多边形。
- 特征(Feature)实际上是结合几何形状和非地理属性的行。它非常类GeoPandas的GeoSeries类。
- 特征组合(FeatureCollection)是一种包含一组特征的表格数据结构。FeatureCollection和GeoDataFrame在概念上几乎一样。
在栅格数据世界,我们关注的是图像(Image)对象。Google Earth Engine的图像由一个或多个段组成,其中每个段都有一个特定的名称、估计的最小值和最大值以及描述。
如果我们有一个图像集合或时间序列,ImageCollection作为数据类型更合适。
我们将显示欧洲陆地覆盖地图的卫星图像可视化。该数据集提供了1986年至2018年之间的变化。
首先,我们使用ee.Image加载图像。然后,选择段“landcover”。最后,不妨通过使用Map. addLayer将加载的数据集添加到地图作为图层来可视化图像。
Map = geemap.Map()
dataset = ee.Image('COPERNICUS/CORINE/V20/100m/2012')
landCover = dataset.select('landcover')
Map.setCenter(16.436, 39.825, 6)
Map.addLayer(landCover, {}, 'Land Cover')
Map
与之相似,我们可以做同样的事情来加载和可视化显示欧洲土地覆盖地图的卫星图像。该数据集提供了1986年至2018年之间的变化。
为了可视化Earth Engine ImageCollection,除了ee.ImageCollection外,几行代码是相似的。
Map = geemap.Map()
collection = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4').select('CH4_column_volume_mixing_ratio_dry_air').filterDate('2019-06-01', '2019-07-16')
band_viz = {
'min': 1750,
'max': 1900,
'palette': ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']
}
Map.addLayer(collection.mean(), band_viz, 'S5P CH4')
Map.setCenter(0.0, 0.0, 2)
Map
从这张地图上,我们可以看到甲烷在全球范围内是如何分布的,甲烷是造成温室效应最重要的因素之一。
结语
这是一篇入门指南,可以帮助您使用Python处理Google Earth Engine数据。Geemap是可视化和分析这类数据的最完整的Python库。
如果您想更深入地了解这个软件包,可以查看下面我建议的参考资料。
代码可以在这里找到:
https://github.com/eugeniaring/Medium-Articles/blob/main/Geo/geemap_tutorial.ipynb。