import streamlit as st import pandas as pd import folium from streamlit_folium import st_folium import ee # Initialize Google Earth Engine service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com' credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json') ee.Initialize(credentials) # Load farm data @st.cache_data def load_farm_data(): return pd.read_csv("Farm_Details_Export.csv") # Replace with your CSV filename farm_data = load_farm_data() # Get user location using JavaScript st.write( """
""", unsafe_allow_html=True, ) # Extract user location from query params query_params = st.query_params user_lat = query_params.get("latitude", [None])[0] user_lon = query_params.get("longitude", [None])[0] # Sidebar input for farm name farm_name = st.sidebar.text_input("Enter farm name:") if farm_name: # Find the farm details farm = farm_data[farm_data["farm_name"] == farm_name] if not farm.empty: # Display farm details in a table st.subheader("Farm Details") st.table(farm[["farm_name", "age", "variety"]]) # Get farm coordinates farm_lat = farm.iloc[0]["latitude"] farm_lon = farm.iloc[0]["longitude"] if user_lat and user_lon: user_lat = float(user_lat) user_lon = float(user_lon) # Google Earth Engine Map Display st.subheader(f"Path to {farm_name} on Map") # Create a line connecting user location to farm location user_point = ee.Geometry.Point([user_lon, user_lat]) farm_point = ee.Geometry.Point([farm_lon, farm_lat]) path = ee.Geometry.LineString([user_point.coordinates().getInfo(), farm_point.coordinates().getInfo()]) # Satellite map using Sentinel-2 satellite_image = ee.ImageCollection("COPERNICUS/S2") \ .filterBounds(path) \ .sort("CLOUD_COVER") \ .first() map_id_dict = satellite_image.getMapId({"bands": ["B4", "B3", "B2"], "min": 0, "max": 3000}) # Create Folium map m = folium.Map(location=[(user_lat + farm_lat) / 2, (user_lon + farm_lon) / 2], zoom_start=12) # Add Satellite Layer folium.TileLayer( tiles=map_id_dict["tile_fetcher"].url_format, attr="Google Earth Engine", name="Satellite", overlay=True, control=True, ).add_to(m) # Add markers and path folium.Marker([farm_lat, farm_lon], popup=f"Farm: {farm_name}", icon=folium.Icon(color="green")).add_to(m) folium.Marker([user_lat, user_lon], popup="Your Location", icon=folium.Icon(color="blue")).add_to(m) folium.PolyLine([(user_lat, user_lon), (farm_lat, farm_lon)], color="red", weight=3, opacity=1).add_to(m) # Display map st_folium(m, width=800, height=600) else: st.warning("Please allow location access for map functionality.") else: st.error("Farm not found in the dataset!") else: st.sidebar.write("Please enter a farm name.")