应用介绍:
本应用依据利用Landsat-8数据,基于潘力、夏浩铭、王瑞萌等研究论文(基于Google Earth Engine 的淮河流域越冬作物种植面积制图)中提出的利用作物在不同物候期内卫星影像的光谱存在差异的特征,通过计算作物时间序列的皈依化植被指数(NDVI),选取越冬作物生长旺盛期NDVI 最大值、越冬作物播种期和收获期中相应的NDVI 最小值和中位数,在像元尺度上构建越冬作物决策树提取算法,实现淮河流域冬小麦的提取。
代码
#常规导入安装包
import os
import json
import datetime
import streamlit as st
import streamlit.components.v1 as components
import traceback
from PIL import Image
import aie
#初始化文件
current_work_dir = os.path.dirname(__file__)
# 隐藏页面右上角的action bar按钮
hide_streamlit_action_button = """
<style>
#MainMenu {visibility: hidden;}
</style>
"""
# 设定布局
#这里设定沾满震整个界面
st.set_page_config(layout="wide", page_title="AIE AppHub")
st.markdown(hide_streamlit_action_button, unsafe_allow_html=True)
# 调整边距
st.markdown(" <style> div[class^='css-1544g2n'] { padding-top: 1px; } </style> ", unsafe_allow_html=True)
st.markdown(" <style> div[class^='block-container'] { padding-top: 1px; } </style> ", unsafe_allow_html=True)
#进行初始化设定
def aie_init():
'''
AIE开发者SDK初始化
请登录后访问https://engine-aiearth.aliyun.com/#/utility/auth-token 获取认证token,
并将token设置为系统环境变量(变量名为SDK_TOKEN),以便下述代码获取并初始化SDK。
'''
token = os.environ.get("SDK_TOKEN") # 请至应用空间设置-环境变量中添加SDK_TOKEN
aie.Authenticate(token=token)
aie.Initialize()
#设定地图,但是这个地图只加载一次,算是固定的地图
@st.cache_resource
def get_default_aie_map():
aie_map = aie.Map(
center=[116.383331,39.916668],
height=800,
zoom=4)
return aie_map.to_html()
#设定研究区选择,但是这只加载一次,算是固定的哈数,这里只加载一次
@st.cache_resource
def load_area_select_options():
file_path = current_work_dir + "/pro_city.json"
with open(file_path, 'r', encoding="utf-8") as reader:
area_arr = json.loads(reader.read())
area_dic = {}
for item in area_arr:
province_name = item['levelOneAreaName']
city_name = item['levelTwoAreaName']
if not province_name in area_dic:
area_dic[province_name] = {}
cities = area_dic[province_name]
if not city_name in cities:
cities[city_name] = {}
return area_dic
# 设定默认的按你牛选项,
def page_reset_callback():
st.session_state['region_province_select'] = '河南省'
st.session_state['region_city_select'] = '请选择'
st.session_state['year'] = 2017
st.session_state['render_map_html'] = get_default_aie_map()
# 定义ndvi函数
def get_ndvi(image):
ndvi = image.normalizedDifference(['SR_B5', 'SR_B4'])
return ndvi
#定义数据筛选的函数
def getl8_ndvi(region,start_date,end_date):
dataset = aie.ImageCo