「AI Earth开发者模式于9月30日启动内测用户邀请,已经收到了众多来自高校、科研院所、行业公司用户的积极申请。
非常感谢用户积极体验产品功能并给出有效反馈,协助我们一同建设和完善公有云平台。」
本期开发者实践案例
Landsat 8 影像可用性分析
开发者“小岛学gis的穆 ” 同学在第一时间进行了线上测试,并反馈了有价值的优化建议。同时利用AIEarth开发者模式改写影像数据可用性分析代码,以下为小穆同学在平台上改写的湖北省 Landsat-8 影像可用性分析的案例。
01 初始化环境
使用AI Earth云平台开发者模式,需要先在AIE Notebook编程环境下导入AIE Python SDK包并初始化。
import aie
aie.Authenticate()
aie.Initialize()
# aie.Initialize(aie.g_var.LogLevel.DEBUG_LEVEL) # 在进行Debug时可使用此代码
02 研究区域选择
AIE平台支持用户直接调用平台上的中国行政区划矢量数据,可以使用STAC ID导入。利用FeatureCollection和filter进行区域筛选,并通过map.addLayer进行区域可视化。
region = aie.FeatureCollection('China_Province') \
.filter(aie.Filter.eq('province', '湖北省')) \
.geometry()
map = aie.Map(center=region.getCenter(),height=800,zoom=6)
vis_params = {'color': '#00FF00'}
map.addLayer(region,vis_params,'region',bounds=region.getBounds())
map
03 L8 影像筛选
利用平台提供的ImageCollection函数对影像数据进行检索。
def l8Collection(startdate, enddate):
images = aie.ImageCollection('LANDSAT_LC08_C02_T1_L2') \
.filterBounds(region) \
.filterDate(startdate, enddate)\
.filter(aie.Filter.lte('eo:cloud_cover', 10.0))
return images
year = 2021
startDate = '2021-01-01';
endDate = '2022-01-01';
l8 = l8Collection(startDate, endDate)
print(l8.size().getInfo())
vis_params = {
'bands': ['SR_B4', 'SR_B3', 'SR_B2'],
'min': 8000,
'max': 13000,
}
map.addLayer(
l8.mosaic().clip(region),
vis_params,
'True Color (432)',
bounds=region.getBounds()
)
map
04 影像边界计算与可视化
获得每一景L8影像边界,将单景影像边界Polygon通过FeatureCollection组合成新的矢量边界文件,并进行图层可视化。
def calfootprint(img):
tmpfootprint = img.getBounds()
polygon = aie.Geometry.Polygon([[
[tmpfootprint[0], tmpfootprint[1]],
[tmpfootprint[2], tmpfootprint[1]],
[tmpfootprint[2], tmpfootprint[3]],
[tmpfootprint[0], tmpfootprint[3]]]
])
return polygon
footprints=[]
size = 50
list_images = l8.toList(count=size).getInfo()
for i in range(size):
id = list_images[i]['id']
footprint = calfootprint(aie.Image(id))
footprints.append(aie.Feature(footprint))
footprints = aie.FeatureCollection(footprints)
visline_params = { 'color': '#d7191c'}
map.addLayer(
footprints,
visline_params,
'footprints',
bounds=footprints.getBounds()
)
map
05 区域可用影像统计
统计区域内、所选时间段下每期影像覆盖区域内的影像数量,并可视化展示。
def calsize(img):
img2 =aie.Image(0)
img3 = aie.Image(1)
return img.multiply(img2).add(img3);
imgCount= l8.select("SR_B2").map(calsize).sum().clip(region);
vis_params = {
'bands': ['SR_B2'],
'palette': ['#d7191c', '#fdae61', '#ffffc0', '#a6d96a', '#1a9641','#FFFFFF','#CE7E45'
,'#DF923D','#F1B555','#FCD163','#99B718','#74A901','#66A000','#529400','#3E8601','#207401'
,'#056201','#004C00','#023B01','#012E01','#011D01','#011301'],
'min': 0,
'max': 100
}
map.addLayer(
imgCount,
vis_params,
'imgCount',
bounds=l8.getBounds()
)
map
AIEarth团队诚挚邀请相关专业同学进行线上应用体验。目前AIEarth正在征集用户应用案例,优秀案例将会在平台案例广场中共享给众多用户。