我们前面提到geemap是基于GEE的基础上进行的二次开发,使用的是python语言。由于python语言在开源、功能集成等方面具有“遥遥领先”的特点,所以geemap相比于GEE来说,肯定有过人之处。在遥感云计算平台中,我们在乎的无外乎是API算子对于算法的可实现性、海量数据处理的能力以及数据使用的便捷性。因此,相比于官方的GEE版本(Javascript),geemap有更多的可能性。本节我们主要推送geemap在数据下载方面的极大便利性,体现在:1)数据下载可以多线程(卡bug);2)一个函数调用实现全球任意区域格网化;3)数据集合(ImageCollection)的一键下载;4)云平台与本地的直接交互(无需通过Google Drive)
01
下载数据到本地
使用ee_export_image函数可以直接将影像下载到当前文件夹下,里面涉及到(ee_Object,filename,scale,crs,crs_transform,region)等多个参数。通常来说,只需要设置(ee_Object,filename,scale,region)四个参数即可。如果需要使得像元无偏差,最好设置(ee_Object,filename,crs,crs_transform,region)这五个参数,具体参考代码如下:
import os
import ee
import geemap
geemap.set_proxy(port=10809)
Map = geemap.Map()
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(
['B5', 'B4', 'B3']
)
region = ee.Geometry.BBox(-122.5955, 37.5339, -122.0982, 37.8252)
fc = ee.FeatureCollection(region)
projection = image.select(0).projection().getInfo()
crs = projection['crs']
crs_transform = projection['transform']
geemap.ee_export_image(
image,
filename="landsat_crs.tif",
crs=crs,
crs_transform=crs_transform,
region=region,
)
02
网格化数据下载
如果需要进行网格化数据下载,可以使用geemap的fishnet函数一键生成任意区域的网格,非常高效便捷。这里,我们以单幅的Landsat影像为例,对其进行网格化下载(4*4),代码和显示结果如下:
fishnet = geemap.fishnet(image.geometry(), rows=4, cols=4, delta=0.5)
style = {'color': 'ffff00ff', 'fillColor': '00000000'}
Map.addLayer(fishnet.style(**style), {}, 'Fishnet')
out_dir = os.path.expanduser('~/Downloads')
geemap.download_ee_image_tiles(
image, fishnet, out_dir, prefix="landsat_", crs="EPSG:3857", scale=30
)
03
数据集合极速下载
如果在javascipt下载影像集合,我们通常需要自己写一个函数或者采用for循环对里面的每一景影像进行下载,从而实现下载影像集合的目的。在geemap里面,他已经将这个功能写在了ee_export_image_collection函数里面,从而高效的将数据集合下载到本地,实现云平台与本地数据的无缝衔接,代码如下:
point = ee.Geometry.Point(-99.2222, 46.7816)
collection = (
ee.ImageCollection('USDA/NAIP/DOQQ')
.filterBounds(point)
.filterDate('2008-01-01', '2018-01-01')
.filter(ee.Filter.listContains("system:band_names", "N"))
)
out_dir = os.path.expanduser('~/Downloads')
geemap.ee_export_image_collection(collection, out_dir=out_dir, scale=10)
04
下载到google drive和Asset
与javascipt版本一样,他也可以实利用ee_export_image_collection_to_drive函数实现将数据下载到google drive,代码如下:
geemap.ee_export_image_collection_to_drive(collection, folder='export', scale=10)
老粉估计都知道,我们也可以将数据下载到asset,以此来解决数据处理过程中“超载”的问题,代码如下:
geemap.ee_export_image_collection_to_asset(collection)
参考文献:https://book.geemap.org/chapters/07_data_export.html
05
更多阅读
1. GEE前沿教程|利用geemap进行本地数据交互、数据显示及下载