Spaces:
Sleeping
Sleeping
Upload 4 files
Browse files- ABK.jpg +0 -0
- IMAN_GEE.json +13 -0
- app.py +115 -0
- requirements.txt +7 -0
ABK.jpg
ADDED
![]() |
IMAN_GEE.json
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"type": "service_account",
|
3 |
+
"project_id": "ee-imanebakhshipoor",
|
4 |
+
"private_key_id": "3427cebd25c3557f7c2d92b7ebea71efc0990385",
|
5 |
+
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQD9w1BsGpwaixZo\nSPUhcPcc7XR5mfocqUjZfSsz4bP07YCJjlkcRXsI9MIeP97cYjQawPJ4VABiv1d9\n7psqLaEP1AAOuMs2ePm5vkpjxwfEaPsyUPHoAdZDY4fOhsMS/SlhOGeegcQ0uQt2\n5QBUVUaXP8cxKgvvbOsi63g/3d3ivHsdJrcqW5RqzditNSlkrmaNVUvvPyy1Fkd+\ndn8rXHGIOAaAQZ0eepTLhxW8jSBJN8xBEBRnx78d5oyxxuDUxe/67lafw5+CKa9O\n07uMRMTjXTMuUYJ+3ryIM+8UbUQwTs/rQeZu7GGSN+rETOG8jF9ekPgButk/0Ukh\ns0oI/sg7AgMBAAECggEAS/q7bSrIe6ASfPX/Q1yF+MjWO4SRYRyEne3+zgFxts+X\n0VfoMXFSRdu29YStLzJOJIaJ8uI/3VEqGqAjIE1aMJmKzN2iprQxHV6u+lIA7tt5\n/tZCn/NQ2ouGAZ3S8bAQQDY5vDlhbGHNX3Nwlk+UG7wyYXOT8EOd4a48Km89POIW\nn0aFEF8GM6+2jVZ/Phuifi9G8JX3ktbYCJEC8b1NopbqiLnVTCS9LU9HtS6jMjvk\nHBwFlXTY/TSb89LMrHfc31aQsU0B+d97y7XUfZxlmy4O+G7YKdBSGdbcEuuovEia\noIAfeZDU4WLsBy3rxpKRIkIc/RsTudANUzl5EwZBXQKBgQD/tzuJyGJbOh2bm9wH\nbqO177F4RA1+nhN7X7EUcwVqT2namP/WIOK8LdIHu7WxYlirQX+2MMF9BYhXt/zG\ndAJGNexc6cEPd//DBdjk+Ojm5EQ+MF4zUcd6SjhWaR6rhK8fDGM5y9Uh0IF9nL7S\nFfuZoh4jF9dj8Z3JCYKqkhFGTwKBgQD+C4agGzdPPfvRoZmS1E/x0RdAe5U/Nly1\nDJCFThg3+9BAMeccsr8QxeI7zyTU59X8SuyC2wlHczHXUvoS+i5iME6xiMuuFIrm\naxMWqoR1LpIVOrjmZKRZOJNdT8WBHbwiBPLUxXoK3vH/JbCiYBd8OrT5EzErnyfy\nNNeVu2qQVQKBgEMPp5KLtZedFxSu/DYKwu48rPsQRcW16QAK6WKmg34M04LbawSZ\n3Txie9lBVfXuB7jp1XdPM/74i3gNrUHSPKJzE8iOGO5Ylv9rMiViTZn3tRnmD15A\nDSM6AapPqRZsFoz6767BkORsTPlHORfZYgE5bdPgNcFlJO8LCnR3GAarAoGAbugT\nPuSC0fpqbEtTY1GDETvKHeGV94HBGV1B3qCIXDB36v6eOd4jIaxyJtA48SXBOqJu\n/HWpaGL2+F0GRbCo/T6/rCvfV8EqHovSSovoxcuuBMydGiAHy9eyJgOEYujbUDK+\n3HrV29cW6N/IbCrtNdPfW/mv9q5F3yyIjZrDW/0CgYB4ILZ10ZW6Pn5eApRHdWKW\nZ20MTczysK2Y6iYdO1dop4lsGke7EyRG90kUID0/hiBoEQjD2vMjvlMEA0hcuFpn\niEl55Ed8VqpMA0LUbTDR4fDfNkfG23vy9AYDfdoF8O+Aow0wpBuUTWFhjDvAsL8/\nsqhqS6UDKNaiDesbs482yg==\n-----END PRIVATE KEY-----\n",
|
6 |
+
"client_email": "[email protected]",
|
7 |
+
"client_id": "105704822098506259560",
|
8 |
+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
9 |
+
"token_uri": "https://oauth2.googleapis.com/token",
|
10 |
+
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
11 |
+
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/iman-gee2%40ee-imanebakhshipoor.iam.gserviceaccount.com",
|
12 |
+
"universe_domain": "googleapis.com"
|
13 |
+
}
|
app.py
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import geopandas as gpd
|
3 |
+
import ee
|
4 |
+
import json
|
5 |
+
import os
|
6 |
+
import tempfile
|
7 |
+
import geemap.foliumap as geemap
|
8 |
+
from io import BytesIO
|
9 |
+
from datetime import datetime
|
10 |
+
from io import StringIO
|
11 |
+
from PIL import Image
|
12 |
+
from google.oauth2 import service_account
|
13 |
+
|
14 |
+
import streamlit as st
|
15 |
+
from PIL import Image
|
16 |
+
|
17 |
+
# بارگذاری تصویر
|
18 |
+
image = Image.open("ABK.jpg") # مسیر تصویر محلی خود را وارد کنید
|
19 |
+
|
20 |
+
# streamlisاستفاده از Sidebar برای نمایش تصویر در بالای آن
|
21 |
+
with st.sidebar:
|
22 |
+
st.image(image, use_container_width=True)
|
23 |
+
st.markdown('<h2 style="color: green;">شرکت مهندسین مشاور آسمان برج کارون</h2>', unsafe_allow_html=True)
|
24 |
+
|
25 |
+
# مقداردهی اولیه GEE
|
26 |
+
|
27 |
+
# # مقداردهی اولیه GEE
|
28 |
+
service_account = "[email protected]"
|
29 |
+
credentials = ee.ServiceAccountCredentials(service_account, "IMAN_GEE.json")
|
30 |
+
ee.Initialize(credentials)
|
31 |
+
|
32 |
+
# آپلود فایل ZIP شامل Shapefile
|
33 |
+
uploaded_file = st.file_uploader("آپلود یک شیپ فایل فشرده شده (.zip)", type=["zip"])
|
34 |
+
|
35 |
+
# استفاده از Sidebar برای انتخاب تاریخ و مقیاس
|
36 |
+
with st.sidebar:
|
37 |
+
start_date = st.date_input("تاریخ شروع", value=datetime(2025, 1, 1), min_value=datetime(2000, 1, 1),
|
38 |
+
max_value=datetime.today())
|
39 |
+
end_date = st.date_input("تاریخ پایان", value=datetime(2025, 2, 15), min_value=datetime(2000, 1, 1),
|
40 |
+
max_value=datetime.today())
|
41 |
+
scale = st.number_input("مقیاس (Scale)", min_value=10, max_value=100, value=10, step=10)
|
42 |
+
|
43 |
+
if uploaded_file:
|
44 |
+
try:
|
45 |
+
gdf = gpd.read_file(BytesIO(uploaded_file.getvalue()))
|
46 |
+
if gdf.crs is not None and gdf.crs.to_epsg() != 4326:
|
47 |
+
gdf = gdf.to_crs(epsg=4326)
|
48 |
+
st.write("CRS Shapefile (converted):", gdf.crs)
|
49 |
+
st.write(" Shapefile:", gdf.geometry)
|
50 |
+
|
51 |
+
geojson = json.loads(gdf.to_json())
|
52 |
+
features = [ee.Feature(feature) for feature in geojson["features"]]
|
53 |
+
region = ee.FeatureCollection(features)
|
54 |
+
|
55 |
+
start_date_ee = ee.Date.fromYMD(start_date.year, start_date.month, start_date.day)
|
56 |
+
end_date_ee = ee.Date.fromYMD(end_date.year, end_date.month, end_date.day)
|
57 |
+
|
58 |
+
image = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED") \
|
59 |
+
.filterBounds(region) \
|
60 |
+
.filterDate(start_date_ee, end_date_ee).median() \
|
61 |
+
.clip(region)
|
62 |
+
|
63 |
+
if image is None:
|
64 |
+
st.error("هیچ تصویری از Sentinel-2 برای این منطقه و بازه زمانی یافت نشد.")
|
65 |
+
else:
|
66 |
+
ndvi = image.normalizedDifference(["B8", "B4"]).rename("NDVI")
|
67 |
+
savi = image.expression(
|
68 |
+
"((B8 - B4) / (B8 + B4 + 0.5)) * (1.5)",
|
69 |
+
{
|
70 |
+
'B8': image.select('B8'),
|
71 |
+
'B4': image.select('B4')
|
72 |
+
}
|
73 |
+
).rename("SAVI")
|
74 |
+
mndwi = image.normalizedDifference(["B3", "B11"]).rename("MNDWI")
|
75 |
+
gcvi = image.expression("B8 / B3 - 1", {
|
76 |
+
'B8': image.select('B8'),
|
77 |
+
'B3': image.select('B3')
|
78 |
+
}).rename("GCVI")
|
79 |
+
|
80 |
+
composite = ndvi.addBands([savi, mndwi, gcvi])
|
81 |
+
|
82 |
+
Map = geemap.Map(center=[gdf.geometry.centroid.y.mean(), gdf.geometry.centroid.x.mean()], zoom=8)
|
83 |
+
Map.add_basemap("OpenStreetMap")
|
84 |
+
Map.add_basemap("HYBRID")
|
85 |
+
Map.addLayer(ndvi, {'min': 0, 'max': 1, 'palette': ['white', 'green']}, "Crop Detect", False)
|
86 |
+
# Map.addLayer(savi, {'min': 0, 'max': 1, 'palette': ['white', 'yellow', 'green']}, "SAVI", False)
|
87 |
+
Map.addLayer(mndwi, {'min': -1, 'max': 1, 'palette': ['red', 'blue']}, "Water Body", False)
|
88 |
+
# Map.addLayer(gcvi, {'palette': ['#ffffff', '#ffff00', '#008000'], 'min': 0.347, 'max': 3.704}, "GCVI",
|
89 |
+
# False)
|
90 |
+
Map.addLayer(image, {'min': 0, 'max': 3000, 'bands': ["B4", "B3", "B2"]}, "True Color", True)
|
91 |
+
Map.addLayer(region, {}, " Shapefile")
|
92 |
+
|
93 |
+
Map.to_streamlit(height=600)
|
94 |
+
|
95 |
+
|
96 |
+
def download_image(image, filename):
|
97 |
+
with st.spinner(f"در حال تولید {filename}... ⏳"):
|
98 |
+
temp_dir = tempfile.gettempdir()
|
99 |
+
temp_path = os.path.join(temp_dir, filename)
|
100 |
+
geemap.ee_export_image(image, filename=temp_path, scale=scale, region=region.geometry().bounds())
|
101 |
+
with open(temp_path, "rb") as f:
|
102 |
+
st.download_button(label=f"download {filename}", data=f, file_name=filename, mime="image/tiff")
|
103 |
+
|
104 |
+
|
105 |
+
st.subheader("download image")
|
106 |
+
download_image(ndvi, "Crop Detect.tif")
|
107 |
+
# download_image(savi, "savi_image.tif")
|
108 |
+
download_image(mndwi, "Water Body.tif")
|
109 |
+
# download_image(gcvi, "gcvi_image.tif")
|
110 |
+
except Exception as e:
|
111 |
+
st.error(f"خطا در پردازش Shapefile یا محاسبه شاخصها: {str(e)}")
|
112 |
+
|
113 |
+
|
114 |
+
|
115 |
+
|
requirements.txt
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
geopandas
|
3 |
+
earthengine-api
|
4 |
+
geemap
|
5 |
+
numpy
|
6 |
+
pandas
|
7 |
+
setuptools
|