阅读量:5
应用介绍:
本应用依据利用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