File size: 2,131 Bytes
79e3418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import streamlit as st
import h5py
import numpy as np
import pandas as pd
import plotly.express as px
import os

filename = r'Reduced_SMAP_L4_SM_aup.h5'

@st.cache_data
def load_h5_data(filename):
    if not os.path.isfile(filename):
        raise FileNotFoundError(f"File not found: {filename}")
    
    with h5py.File(filename, 'r') as h5:
        soil_moisture = h5['Analysis_Data/sm_surface_analysis'][:]
        lat = h5['cell_lat'][:]
        lon = h5['cell_lon'][:]
        return lat, lon, soil_moisture

try:
    lat, lon, soil_moisture = load_h5_data(filename)
    
    df = pd.DataFrame({
        'Latitude': lat.flatten(),
        'Longitude': lon.flatten(),
        'Soil Moisture': soil_moisture.flatten()
    })
    
    st.title("Soil Moisture Data Dashboard")
    st.write("This dashboard displays soil moisture levels based on latitude and longitude.")
    
    min_lat, max_lat = st.slider("Select Latitude Range", float(df['Latitude'].min()), float(df['Latitude'].max()), (float(df['Latitude'].min()), float(df['Latitude'].max())))
    min_lon, max_lon = st.slider("Select Longitude Range", float(df['Longitude'].min()), float(df['Longitude'].max()), (float(df['Longitude'].min()), float(df['Longitude'].max())))
    
    filtered_data = df[(df['Latitude'] >= min_lat) & (df['Latitude'] <= max_lat) & (df['Longitude'] >= min_lon) & (df['Longitude'] <= max_lon)]
    
    st.write(f"Displaying data for Latitude between {min_lat} and {max_lat} and Longitude between {min_lon} and {max_lon}")
    st.dataframe(filtered_data)
    
    if not filtered_data.empty:
        fig = px.scatter_mapbox(filtered_data, lat='Latitude', lon='Longitude', color='Soil Moisture',
                                color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=3)
        fig.update_layout(mapbox_style="open-street-map")
        fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
        st.plotly_chart(fig)
    else:
        st.write("No data available in the selected range.")
    
except FileNotFoundError as e:
    st.error(str(e))
except Exception as e:
    st.error(f"An error occurred: {str(e)}")