借助Geemap分析空間地理數據
譯文譯者 | 布加迪
審校 | 重樓
地理空間數據分析是一個專門領域,用來處理、可視化和分析一種特殊類型的數據:地理空間數據。與正常數據相比,地理空間數據是帶有附加列:位置信息(比如緯度和經度)的表格數據。
有兩種主要類型的數據:矢量數據和柵格數據。在處理矢量數據時,您仍有一個表格數據集,而柵格數據更類似圖像,比如衛星圖像和航空照片。
本文將重點介紹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。
實用資源
- Google Earth Engine:https://earthengine.google.com/
- Geemap文檔:https://geemap.org/
- 圖書《Earth Engine and Geemap:Geospatial Data Science with Python》:https://book.geemap.org/
原文標題:Geospatial Data Analysis with Geemap,作者:Eugenia Anello