imanbakhshi commited on
Commit
57c82fd
·
verified ·
1 Parent(s): dd19037

Upload 4 files

Browse files
Files changed (4) hide show
  1. ABK.jpg +0 -0
  2. IMAN_GEE.json +13 -0
  3. app.py +115 -0
  4. 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