Spaces:
Running
Running
upload 14 file
Browse files- .gitattributes +1 -0
- Bhankhara_Df_11_he_5_2020-21.geojson +8 -0
- CoalTPP_Locations - small_dataset.csv +6 -0
- CoalTPP_Locations.csv +185 -0
- CoalTPP_Locations.geojson +183 -0
- ISRO_Logo.png +0 -0
- SAC_Logo.png +3 -0
- agriculture_lab-high-resolution-logo-grayscale-transparent.png +0 -0
- app.py +739 -0
- landsat_datasets.json +113 -0
- logo-color.png +0 -0
- modis_datasets.json +68 -0
- requirements.txt +8 -0
- sentinel_datasets.json +49 -0
- viirs_datasets.json +90 -0
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
SAC_Logo.png filter=lfs diff=lfs merge=lfs -text
|
Bhankhara_Df_11_he_5_2020-21.geojson
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"type": "FeatureCollection",
|
3 |
+
"name": "Bhankhara Df 11 he 5 2020-21",
|
4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
5 |
+
"features": [
|
6 |
+
{ "type": "Feature", "properties": { "Name": "bhankhara Df " }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.232880205954501, 23.9293492015216 ], [ 73.2320424558106, 23.9295414782706 ], [ 73.231770305881497, 23.929079612195199 ], [ 73.230492834793793, 23.929757112420202 ], [ 73.2296710069635, 23.930461233260601 ], [ 73.2287325848189, 23.929426068463702 ], [ 73.230010982152606, 23.928454021654801 ], [ 73.231320825956999, 23.9274161693899 ], [ 73.231748632627799, 23.9277412596551 ], [ 73.232405167342506, 23.927898156106 ], [ 73.232880205954501, 23.9293492015216 ] ] ] } }
|
7 |
+
]
|
8 |
+
}
|
CoalTPP_Locations - small_dataset.csv
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name,latitude,longitude
|
2 |
+
PANIPAT TPS,29.3975059,76.8763161
|
3 |
+
RAJIV GANDHI TPS,29.34698,75.857538
|
4 |
+
YAMUNA NAGAR TPS,30.1075175,77.3267646
|
5 |
+
GH TPS (LEH.MOH.),30.2674,75.1644
|
6 |
+
GOINDWAL SAHIB TPP,31.38414,75.146503
|
CoalTPP_Locations.csv
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name,latitude,longitude
|
2 |
+
PANIPAT TPS,29.3975059,76.8763161
|
3 |
+
RAJIV GANDHI TPS,29.34698,75.857538
|
4 |
+
YAMUNA NAGAR TPS,30.1075175,77.3267646
|
5 |
+
GH TPS (LEH.MOH.),30.2674,75.1644
|
6 |
+
GOINDWAL SAHIB TPP,31.38414,75.146503
|
7 |
+
ROPAR TPS,31.0417,76.5847
|
8 |
+
CHHABRA-II TPP,24.6236,77.0383
|
9 |
+
CHHABRA-I PH-1 TPP,24.62092,77.035439
|
10 |
+
CHHABRA-I PH-2 TPP,24.63433,77.0385039
|
11 |
+
KALISINDH TPS,24.5325129,76.100353
|
12 |
+
KOTA TPS,25.1717,75.8169
|
13 |
+
SURATGARH STPS,29.181766,74.018741
|
14 |
+
SURATGARH TPS,29.181766,74.018741
|
15 |
+
ANPARA TPS,24.202043,82.789128
|
16 |
+
HARDUAGANJ TPS,28.0175,78.13
|
17 |
+
JAWAHARPUR STPP,27.497098,78.826071
|
18 |
+
OBRA TPS,24.4445803,82.9803325
|
19 |
+
PARICHHA TPS,25.513571,78.757918
|
20 |
+
DSPM TPS,22.368196,82.721986
|
21 |
+
KORBA-WEST TPS,22.412536,82.682187
|
22 |
+
MARWA TPS,22.070801,82.602189
|
23 |
+
GANDHI NAGAR TPS,23.249722,72.673889
|
24 |
+
UKAI TPS,21.2093,73.5574
|
25 |
+
WANAKBORI TPS,22.8725375,73.3588028
|
26 |
+
AMARKANTAK EXT TPS,23.162146,81.632816
|
27 |
+
SANJAY GANDHI TPS,23.305744,81.064817
|
28 |
+
SATPURA TPS,22.108133,78.177072
|
29 |
+
SHREE SINGAJI TPP,22.09914,76.531727
|
30 |
+
BHUSAWAL TPS,21.04798,75.85502
|
31 |
+
CHANDRAPUR(MAHARASHTRA) STPS,20.0063,79.29
|
32 |
+
KHAPARKHEDA TPS,21.276138,79.121518
|
33 |
+
KORADI TPS,21.2420685,79.0949659
|
34 |
+
NASIK TPS,19.9814589,73.8920556
|
35 |
+
PARAS TPS,20.7147,76.7948
|
36 |
+
PARLI TPS,18.9075857,76.5429497
|
37 |
+
Dr. N.TATA RAO TPS,16.5984901,80.5365853
|
38 |
+
RAYALASEEMA TPS,14.697282,78.459364
|
39 |
+
DAMODARAM SANJEEVAIAH TPS,14.327604,80.122105
|
40 |
+
BELLARY TPS,15.1931738,76.7195034
|
41 |
+
RAICHUR TPS,16.3532,77.3422
|
42 |
+
YERMARUS TPP,16.295261,77.35612
|
43 |
+
METTUR TPS,11.7720201,77.8141046
|
44 |
+
METTUR TPS - II,11.7744564,77.8172243
|
45 |
+
NORTH CHENNAI TPS,13.253013,80.327804
|
46 |
+
TUTICORIN TPS,8.762518,78.175976
|
47 |
+
SINGARENI TPP,18.837231,79.574766
|
48 |
+
BHADRADRI TPP,18.027488,80.735645
|
49 |
+
KAKATIYA TPS,18.3831934,79.8271644
|
50 |
+
KOTHAGUDEM TPS (NEW),17.6219,80.69355
|
51 |
+
KOTHAGUDEM TPS (STAGE-7),,
|
52 |
+
RAMAGUNDEM-B TPS,,
|
53 |
+
TENUGHAT TPS,23.7276632,85.7652325
|
54 |
+
IB VALLEY TPS,21.690729,83.860096
|
55 |
+
D.P.L. TPS,23.521147,87.302309
|
56 |
+
BAKRESWAR TPS,23.8292205,87.451034
|
57 |
+
BANDEL TPS,22.995746,88.403815
|
58 |
+
KOLAGHAT TPS,22.416565,87.870984
|
59 |
+
SAGARDIGHI TPS,24.3688141,88.1040001
|
60 |
+
SANTALDIH TPS,23.6013,86.4666
|
61 |
+
DADRI (NCTPP),28.603,77.6078
|
62 |
+
RIHAND STPS,24.027,82.7915
|
63 |
+
SINGRAULI STPS,24.1042119,82.7063552
|
64 |
+
TANDA TPS,26.5894846,82.601235
|
65 |
+
UNCHAHAR TPS,25.9137597,81.3272384
|
66 |
+
GADARWARA TPP,22.861752,78.866129
|
67 |
+
KHARGONE STPP,22.065169,75.851943
|
68 |
+
KORBA STPS,22.3874221,82.6818961
|
69 |
+
LARA TPP,21.757661,83.457545
|
70 |
+
MAUDA TPS,21.18074,79.396541
|
71 |
+
SIPAT STPS,22.131662,82.29035
|
72 |
+
SOLAPUR STPS,17.551296,75.9832
|
73 |
+
VINDHYACHAL STPS,24.0983,82.6719
|
74 |
+
KUDGI STPP,16.499546,75.834632
|
75 |
+
RAMAGUNDEM STPS,18.7584502,79.4573172
|
76 |
+
SIMHADRI,17.591,83.09166
|
77 |
+
TELANGANA STPP PH-1,18.7584502,79.4573172
|
78 |
+
BARAUNI TPS,25.391376,86.023488
|
79 |
+
BARH STPS,25.4693,85.74516
|
80 |
+
DARLIPALI STPS,21.963554,83.89187
|
81 |
+
FARAKKA STPS,24.772729,87.893707
|
82 |
+
KAHALGAON TPS,25.236903,87.265595
|
83 |
+
NORTH KARANPURA TPP,23.850772,85.012411
|
84 |
+
TALCHER STPS,21.098074,85.074005
|
85 |
+
BONGAIGAON TPP,26.44437,90.367205
|
86 |
+
INDIRA GANDHI STPP,28.485091,76.37316
|
87 |
+
MEJA STPP,25.145867,81.940096
|
88 |
+
BHILAI TPS,21.184,81.4237
|
89 |
+
SEIONI TPP,22.735479,79.912341
|
90 |
+
VALLUR TPP,13.237131,80.301754
|
91 |
+
MUZAFFARPUR TPS,26.194771,85.303302
|
92 |
+
NABINAGAR STPP,24.776,84.158025
|
93 |
+
NABINAGAR TPP,24.705081,84.088738
|
94 |
+
BOKARO TPS `A` EXP,23.782944,85.883391
|
95 |
+
CHANDRAPURA(DVC) TPS,20.0063,79.29
|
96 |
+
DURGAPUR STEEL TPS,23.531506,87.249856
|
97 |
+
KODARMA TPP,24.391534,85.561899
|
98 |
+
MEJIA TPS,23.4639,87.1311
|
99 |
+
RAGHUNATHPUR TPP,23.62191,86.660703
|
100 |
+
NTPL TUTICORIN TPP,8.760363,78.171083
|
101 |
+
ADANI POWER LIMITED KAWAI TPP,24.777997,76.737144
|
102 |
+
ADANI POWER LIMITED RAIGARH TPP,21.743775,83.274093
|
103 |
+
ADANI POWER LIMITED RAIPUR TPP,21.449918,81.852474
|
104 |
+
ADANI POWER LIMITED TIRODA TPP,21.412502,79.96731
|
105 |
+
AKALTARA TPS,21.960296,82.409064
|
106 |
+
AMRAVATI TPS,21.080316,77.901242
|
107 |
+
ANPARA C TPS,24.202043,82.789128
|
108 |
+
ANUPPUR TPP,23.073731,81.784286
|
109 |
+
BALCO TPS,22.3930944,82.7439443
|
110 |
+
BANDAKHAR TPP,22.340954,82.430603
|
111 |
+
BARADARHA TPS,21.911436,83.188863
|
112 |
+
BARKHERA TPS,28.55,80.1
|
113 |
+
BELA TPS,20.806389,79.051944
|
114 |
+
BINA TPS,24.317222,78.133564
|
115 |
+
BINJKOTE TPP,22.010422,83.205779
|
116 |
+
BUDGE BUDGE TPS,22.470344,88.139949
|
117 |
+
DAHANU TPS,19.9545,72.7478
|
118 |
+
DERANG TPP,21.127044,84.980552
|
119 |
+
DHARIWAL TPP,20.010588,79.203433
|
120 |
+
DISHERGARH TPP,,
|
121 |
+
GMR WARORA TPS,20.279656,78.975351
|
122 |
+
HALDIA TPP,22.060459,88.109748
|
123 |
+
HIRANMAYE TPP,22.076989,88.098413
|
124 |
+
JOJOBERA TPS,22.7554,86.2491
|
125 |
+
KAMALANGA TPS,20.870576,85.266979
|
126 |
+
KHAMBARKHERA TPS,27.9,80.8
|
127 |
+
KUNDARKI TPS,27.03,82.23
|
128 |
+
LALITPUR TPS,24.795833,78.646944
|
129 |
+
MAHADEV PRASAD STPP,22.836504,86.061294
|
130 |
+
MAHAN TPP,24.008674,82.41703
|
131 |
+
MAHATMA GANDHI TPS,28.488143,76.352534
|
132 |
+
MAITHON RB TPP,23.8209,86.76
|
133 |
+
MAQSOODPUR TPS,27.81,79.94
|
134 |
+
NAWAPARA TPP,21.906738,83.128556
|
135 |
+
NIGRI TPP,24.14997,81.904525
|
136 |
+
OP JINDAL TPS,22.104,83.445
|
137 |
+
PAINAMPURAM TPP,14.351195,80.143086
|
138 |
+
PATHADI TPP,22.2454,82.7246
|
139 |
+
PRAYAGRAJ TPP,25.196345,81.658534
|
140 |
+
RAJPURA TPP,30.558963,76.577593
|
141 |
+
ROSA TPP Ph-I,27.8194455,79.9371618
|
142 |
+
SABARMATI (D-F STATIONS),23.070555,72.593889
|
143 |
+
SASAN UMTPP,23.9775233,82.6264733
|
144 |
+
SGPL TPP,14.351195,80.143086
|
145 |
+
SHIRPUR TPP,21.15103,74.854206
|
146 |
+
SOUTHERN REPL. TPS,22.549591,88.291512
|
147 |
+
TALWANDI SABO TPP,29.92458,75.238929
|
148 |
+
TAMNAR TPP,22.098747,83.451312
|
149 |
+
UCHPINDA TPP,21.8864,83.12081
|
150 |
+
UTKAL TPP (IND BARATH),21.657942,83.919513
|
151 |
+
UTRAULA TPS,27.43,82.18
|
152 |
+
VEDANTA TPP,21.815743,84.042036
|
153 |
+
VIZAG TPP,17.563642,83.138877
|
154 |
+
WARDHA WARORA TPP,20.272443,78.978916
|
155 |
+
SIKKA REP. TPS,22.420828,69.8276
|
156 |
+
ADANI POWER LIMITED MUNDRA TPP - III,22.8234904,69.5534831
|
157 |
+
ADANI POWER LIMITED MUNDRA TPP - I & II,22.8234904,69.5534831
|
158 |
+
ADANI POWER LIMITED UDUPI TPP,13.1596,74.8002
|
159 |
+
ITPCL TPP,11.5216092,79.7518447
|
160 |
+
JSW RATNAGIRI TPP,17.296375,73.213105
|
161 |
+
MUNDRA UMTPP,22.8158,69.5281
|
162 |
+
MUTHIARA TPP,8.912716,78.144965
|
163 |
+
OPG Power Generation Private Limited,13.437422,80.09788
|
164 |
+
SALAYA TPP,22.3049,69.7101
|
165 |
+
SHREE CEMENT LTD TPS,26.073889,74.385
|
166 |
+
SIMHAPURI TPS,14.204576,80.086636
|
167 |
+
THAMMINAPATNAM TPS,,
|
168 |
+
TORANGALLU TPS(SBU-I),15.186771,76.6621387
|
169 |
+
TORANGALLU TPS(SBU-II),15.186771,76.6621387
|
170 |
+
TROMBAY TPS,19.0027,72.8979
|
171 |
+
TUTICORIN TPP ST-IV,,
|
172 |
+
BUTIBORI TPP,20.928591,78.933281
|
173 |
+
MIHAN TPS,21.0377,78.9334
|
174 |
+
NASIK (P) TPS,,
|
175 |
+
SALORA TPP,22.489952,82.606239
|
176 |
+
TUTICORIN (P) TPP,,
|
177 |
+
TITAGARH TPS,22.731974,88.370309
|
178 |
+
CHAKABURA TPP,22.393653,82.553249
|
179 |
+
GEPL TPP Ph-I,19.92949,79.133159
|
180 |
+
KASAIPALLI TPP,22.38895,82.5549
|
181 |
+
KATGHORA TPP,22.489779,82.60618
|
182 |
+
NIWARI TPP,25.43,79.71
|
183 |
+
RATIJA TPS,22.339994,82.492776
|
184 |
+
SVPL TPP,22.292,82.5254
|
185 |
+
SWASTIK KORBA TPP,,
|
CoalTPP_Locations.geojson
ADDED
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"type": "FeatureCollection",
|
3 |
+
"name": "CoalTPP_Locations",
|
4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
5 |
+
"features": [
|
6 |
+
{ "type": "Feature", "properties": { "Name": "PANIPAT TPS", "Latitude": 29.3975059, "Longitude": 76.8763161 }, "geometry": { "type": "Point", "coordinates": [ 76.8763161, 29.3975059 ] } },
|
7 |
+
{ "type": "Feature", "properties": { "Name": "RAJIV GANDHI TPS", "Latitude": 29.34698, "Longitude": 75.857538 }, "geometry": { "type": "Point", "coordinates": [ 75.857538, 29.34698 ] } },
|
8 |
+
{ "type": "Feature", "properties": { "Name": "YAMUNA NAGAR TPS", "Latitude": 30.1075175, "Longitude": 77.3267646 }, "geometry": { "type": "Point", "coordinates": [ 77.3267646, 30.1075175 ] } },
|
9 |
+
{ "type": "Feature", "properties": { "Name": "GH TPS (LEH.MOH.)", "Latitude": 30.2674, "Longitude": 75.1644 }, "geometry": { "type": "Point", "coordinates": [ 75.1644, 30.2674 ] } },
|
10 |
+
{ "type": "Feature", "properties": { "Name": "GOINDWAL SAHIB TPP", "Latitude": 31.38414, "Longitude": 75.146503 }, "geometry": { "type": "Point", "coordinates": [ 75.146503, 31.38414 ] } },
|
11 |
+
{ "type": "Feature", "properties": { "Name": "ROPAR TPS", "Latitude": 31.0417, "Longitude": 76.5847 }, "geometry": { "type": "Point", "coordinates": [ 76.5847, 31.0417 ] } },
|
12 |
+
{ "type": "Feature", "properties": { "Name": "CHHABRA-II TPP", "Latitude": 24.6236, "Longitude": 77.0383 }, "geometry": { "type": "Point", "coordinates": [ 77.0383, 24.6236 ] } },
|
13 |
+
{ "type": "Feature", "properties": { "Name": "CHHABRA-I PH-1 TPP", "Latitude": 24.62092, "Longitude": 77.035439 }, "geometry": { "type": "Point", "coordinates": [ 77.035439, 24.62092 ] } },
|
14 |
+
{ "type": "Feature", "properties": { "Name": "CHHABRA-I PH-2 TPP", "Latitude": 24.63433, "Longitude": 77.0385039 }, "geometry": { "type": "Point", "coordinates": [ 77.0385039, 24.63433 ] } },
|
15 |
+
{ "type": "Feature", "properties": { "Name": "KALISINDH TPS", "Latitude": 24.5325129, "Longitude": 76.100353 }, "geometry": { "type": "Point", "coordinates": [ 76.100353, 24.5325129 ] } },
|
16 |
+
{ "type": "Feature", "properties": { "Name": "KOTA TPS", "Latitude": 25.1717, "Longitude": 75.8169 }, "geometry": { "type": "Point", "coordinates": [ 75.8169, 25.1717 ] } },
|
17 |
+
{ "type": "Feature", "properties": { "Name": "SURATGARH STPS", "Latitude": 29.181766, "Longitude": 74.018741 }, "geometry": { "type": "Point", "coordinates": [ 74.018741, 29.181766 ] } },
|
18 |
+
{ "type": "Feature", "properties": { "Name": "SURATGARH TPS", "Latitude": 29.181766, "Longitude": 74.018741 }, "geometry": { "type": "Point", "coordinates": [ 74.018741, 29.181766 ] } },
|
19 |
+
{ "type": "Feature", "properties": { "Name": "ANPARA TPS", "Latitude": 24.202043, "Longitude": 82.789128 }, "geometry": { "type": "Point", "coordinates": [ 82.789128, 24.202043 ] } },
|
20 |
+
{ "type": "Feature", "properties": { "Name": "HARDUAGANJ TPS", "Latitude": 28.0175, "Longitude": 78.13 }, "geometry": { "type": "Point", "coordinates": [ 78.13, 28.0175 ] } },
|
21 |
+
{ "type": "Feature", "properties": { "Name": "JAWAHARPUR STPP", "Latitude": 27.497098, "Longitude": 78.826071 }, "geometry": { "type": "Point", "coordinates": [ 78.826071, 27.497098 ] } },
|
22 |
+
{ "type": "Feature", "properties": { "Name": "OBRA TPS", "Latitude": 24.4445803, "Longitude": 82.9803325 }, "geometry": { "type": "Point", "coordinates": [ 82.9803325, 24.4445803 ] } },
|
23 |
+
{ "type": "Feature", "properties": { "Name": "PARICHHA TPS", "Latitude": 25.513571, "Longitude": 78.757918 }, "geometry": { "type": "Point", "coordinates": [ 78.757918, 25.513571 ] } },
|
24 |
+
{ "type": "Feature", "properties": { "Name": "DSPM TPS", "Latitude": 22.368196, "Longitude": 82.721986 }, "geometry": { "type": "Point", "coordinates": [ 82.721986, 22.368196 ] } },
|
25 |
+
{ "type": "Feature", "properties": { "Name": "KORBA-WEST TPS", "Latitude": 22.412536, "Longitude": 82.682187 }, "geometry": { "type": "Point", "coordinates": [ 82.682187, 22.412536 ] } },
|
26 |
+
{ "type": "Feature", "properties": { "Name": "MARWA TPS", "Latitude": 22.070801, "Longitude": 82.602189 }, "geometry": { "type": "Point", "coordinates": [ 82.602189, 22.070801 ] } },
|
27 |
+
{ "type": "Feature", "properties": { "Name": "GANDHI NAGAR TPS", "Latitude": 23.249722, "Longitude": 72.673889 }, "geometry": { "type": "Point", "coordinates": [ 72.673889, 23.249722 ] } },
|
28 |
+
{ "type": "Feature", "properties": { "Name": "UKAI TPS", "Latitude": 21.2093, "Longitude": 73.5574 }, "geometry": { "type": "Point", "coordinates": [ 73.5574, 21.2093 ] } },
|
29 |
+
{ "type": "Feature", "properties": { "Name": "WANAKBORI TPS", "Latitude": 22.8725375, "Longitude": 73.3588028 }, "geometry": { "type": "Point", "coordinates": [ 73.3588028, 22.8725375 ] } },
|
30 |
+
{ "type": "Feature", "properties": { "Name": "AMARKANTAK EXT TPS", "Latitude": 23.162146, "Longitude": 81.632816 }, "geometry": { "type": "Point", "coordinates": [ 81.632816, 23.162146 ] } },
|
31 |
+
{ "type": "Feature", "properties": { "Name": "SANJAY GANDHI TPS", "Latitude": 23.305744, "Longitude": 81.064817 }, "geometry": { "type": "Point", "coordinates": [ 81.064817, 23.305744 ] } },
|
32 |
+
{ "type": "Feature", "properties": { "Name": "SATPURA TPS", "Latitude": 22.108133, "Longitude": 78.177072 }, "geometry": { "type": "Point", "coordinates": [ 78.177072, 22.108133 ] } },
|
33 |
+
{ "type": "Feature", "properties": { "Name": "SHREE SINGAJI TPP", "Latitude": 22.09914, "Longitude": 76.531727 }, "geometry": { "type": "Point", "coordinates": [ 76.531727, 22.09914 ] } },
|
34 |
+
{ "type": "Feature", "properties": { "Name": "BHUSAWAL TPS", "Latitude": 21.04798, "Longitude": 75.85502 }, "geometry": { "type": "Point", "coordinates": [ 75.85502, 21.04798 ] } },
|
35 |
+
{ "type": "Feature", "properties": { "Name": "CHANDRAPUR(MAHARASHTRA) STPS", "Latitude": 20.0063, "Longitude": 79.29 }, "geometry": { "type": "Point", "coordinates": [ 79.29, 20.0063 ] } },
|
36 |
+
{ "type": "Feature", "properties": { "Name": "KHAPARKHEDA TPS", "Latitude": 21.276138, "Longitude": 79.121518 }, "geometry": { "type": "Point", "coordinates": [ 79.121518, 21.276138 ] } },
|
37 |
+
{ "type": "Feature", "properties": { "Name": "KORADI TPS", "Latitude": 21.2420685, "Longitude": 79.0949659 }, "geometry": { "type": "Point", "coordinates": [ 79.0949659, 21.2420685 ] } },
|
38 |
+
{ "type": "Feature", "properties": { "Name": "NASIK TPS", "Latitude": 19.9814589, "Longitude": 73.8920556 }, "geometry": { "type": "Point", "coordinates": [ 73.8920556, 19.9814589 ] } },
|
39 |
+
{ "type": "Feature", "properties": { "Name": "PARAS TPS", "Latitude": 20.7147, "Longitude": 76.7948 }, "geometry": { "type": "Point", "coordinates": [ 76.7948, 20.7147 ] } },
|
40 |
+
{ "type": "Feature", "properties": { "Name": "PARLI TPS", "Latitude": 18.9075857, "Longitude": 76.5429497 }, "geometry": { "type": "Point", "coordinates": [ 76.5429497, 18.9075857 ] } },
|
41 |
+
{ "type": "Feature", "properties": { "Name": "Dr. N.TATA RAO TPS", "Latitude": 16.5984901, "Longitude": 80.5365853 }, "geometry": { "type": "Point", "coordinates": [ 80.5365853, 16.5984901 ] } },
|
42 |
+
{ "type": "Feature", "properties": { "Name": "RAYALASEEMA TPS", "Latitude": 14.697282, "Longitude": 78.459364 }, "geometry": { "type": "Point", "coordinates": [ 78.459364, 14.697282 ] } },
|
43 |
+
{ "type": "Feature", "properties": { "Name": "DAMODARAM SANJEEVAIAH TPS", "Latitude": 14.327604, "Longitude": 80.122105 }, "geometry": { "type": "Point", "coordinates": [ 80.122105, 14.327604 ] } },
|
44 |
+
{ "type": "Feature", "properties": { "Name": "BELLARY TPS", "Latitude": 15.1931738, "Longitude": 76.7195034 }, "geometry": { "type": "Point", "coordinates": [ 76.7195034, 15.1931738 ] } },
|
45 |
+
{ "type": "Feature", "properties": { "Name": "RAICHUR TPS", "Latitude": 16.3532, "Longitude": 77.3422 }, "geometry": { "type": "Point", "coordinates": [ 77.3422, 16.3532 ] } },
|
46 |
+
{ "type": "Feature", "properties": { "Name": "YERMARUS TPP", "Latitude": 16.295261, "Longitude": 77.35612 }, "geometry": { "type": "Point", "coordinates": [ 77.35612, 16.295261 ] } },
|
47 |
+
{ "type": "Feature", "properties": { "Name": "METTUR TPS", "Latitude": 11.7720201, "Longitude": 77.8141046 }, "geometry": { "type": "Point", "coordinates": [ 77.8141046, 11.7720201 ] } },
|
48 |
+
{ "type": "Feature", "properties": { "Name": "METTUR TPS - II", "Latitude": 11.7744564, "Longitude": 77.8172243 }, "geometry": { "type": "Point", "coordinates": [ 77.8172243, 11.7744564 ] } },
|
49 |
+
{ "type": "Feature", "properties": { "Name": "NORTH CHENNAI TPS", "Latitude": 13.253013, "Longitude": 80.327804 }, "geometry": { "type": "Point", "coordinates": [ 80.327804, 13.253013 ] } },
|
50 |
+
{ "type": "Feature", "properties": { "Name": "TUTICORIN TPS", "Latitude": 8.762518, "Longitude": 78.175976 }, "geometry": { "type": "Point", "coordinates": [ 78.175976, 8.762518 ] } },
|
51 |
+
{ "type": "Feature", "properties": { "Name": "SINGARENI TPP", "Latitude": 18.837231, "Longitude": 79.574766 }, "geometry": { "type": "Point", "coordinates": [ 79.574766, 18.837231 ] } },
|
52 |
+
{ "type": "Feature", "properties": { "Name": "BHADRADRI TPP", "Latitude": 18.027488, "Longitude": 80.735645 }, "geometry": { "type": "Point", "coordinates": [ 80.735645, 18.027488 ] } },
|
53 |
+
{ "type": "Feature", "properties": { "Name": "KAKATIYA TPS", "Latitude": 18.3831934, "Longitude": 79.8271644 }, "geometry": { "type": "Point", "coordinates": [ 79.8271644, 18.3831934 ] } },
|
54 |
+
{ "type": "Feature", "properties": { "Name": "KOTHAGUDEM TPS (NEW)", "Latitude": 17.6219, "Longitude": 80.69355 }, "geometry": { "type": "Point", "coordinates": [ 80.69355, 17.6219 ] } },
|
55 |
+
{ "type": "Feature", "properties": { "Name": "TENUGHAT TPS", "Latitude": 23.7276632, "Longitude": 85.7652325 }, "geometry": { "type": "Point", "coordinates": [ 85.7652325, 23.7276632 ] } },
|
56 |
+
{ "type": "Feature", "properties": { "Name": "IB VALLEY TPS", "Latitude": 21.690729, "Longitude": 83.860096 }, "geometry": { "type": "Point", "coordinates": [ 83.860096, 21.690729 ] } },
|
57 |
+
{ "type": "Feature", "properties": { "Name": "D.P.L. TPS", "Latitude": 23.521147, "Longitude": 87.302309 }, "geometry": { "type": "Point", "coordinates": [ 87.302309, 23.521147 ] } },
|
58 |
+
{ "type": "Feature", "properties": { "Name": "BAKRESWAR TPS", "Latitude": 23.8292205, "Longitude": 87.451034 }, "geometry": { "type": "Point", "coordinates": [ 87.451034, 23.8292205 ] } },
|
59 |
+
{ "type": "Feature", "properties": { "Name": "BANDEL TPS", "Latitude": 22.995746, "Longitude": 88.403815 }, "geometry": { "type": "Point", "coordinates": [ 88.403815, 22.995746 ] } },
|
60 |
+
{ "type": "Feature", "properties": { "Name": "KOLAGHAT TPS", "Latitude": 22.416565, "Longitude": 87.870984 }, "geometry": { "type": "Point", "coordinates": [ 87.870984, 22.416565 ] } },
|
61 |
+
{ "type": "Feature", "properties": { "Name": "SAGARDIGHI TPS", "Latitude": 24.3688141, "Longitude": 88.1040001 }, "geometry": { "type": "Point", "coordinates": [ 88.1040001, 24.3688141 ] } },
|
62 |
+
{ "type": "Feature", "properties": { "Name": "SANTALDIH TPS", "Latitude": 23.6013, "Longitude": 86.4666 }, "geometry": { "type": "Point", "coordinates": [ 86.4666, 23.6013 ] } },
|
63 |
+
{ "type": "Feature", "properties": { "Name": "DADRI (NCTPP)", "Latitude": 28.603, "Longitude": 77.6078 }, "geometry": { "type": "Point", "coordinates": [ 77.6078, 28.603 ] } },
|
64 |
+
{ "type": "Feature", "properties": { "Name": "RIHAND STPS", "Latitude": 24.027, "Longitude": 82.7915 }, "geometry": { "type": "Point", "coordinates": [ 82.7915, 24.027 ] } },
|
65 |
+
{ "type": "Feature", "properties": { "Name": "SINGRAULI STPS", "Latitude": 24.1042119, "Longitude": 82.7063552 }, "geometry": { "type": "Point", "coordinates": [ 82.7063552, 24.1042119 ] } },
|
66 |
+
{ "type": "Feature", "properties": { "Name": "TANDA TPS", "Latitude": 26.5894846, "Longitude": 82.601235 }, "geometry": { "type": "Point", "coordinates": [ 82.601235, 26.5894846 ] } },
|
67 |
+
{ "type": "Feature", "properties": { "Name": "UNCHAHAR TPS", "Latitude": 25.9137597, "Longitude": 81.3272384 }, "geometry": { "type": "Point", "coordinates": [ 81.3272384, 25.9137597 ] } },
|
68 |
+
{ "type": "Feature", "properties": { "Name": "GADARWARA TPP", "Latitude": 22.861752, "Longitude": 78.866129 }, "geometry": { "type": "Point", "coordinates": [ 78.866129, 22.861752 ] } },
|
69 |
+
{ "type": "Feature", "properties": { "Name": "KHARGONE STPP", "Latitude": 22.065169, "Longitude": 75.851943 }, "geometry": { "type": "Point", "coordinates": [ 75.851943, 22.065169 ] } },
|
70 |
+
{ "type": "Feature", "properties": { "Name": "KORBA STPS", "Latitude": 22.3874221, "Longitude": 82.6818961 }, "geometry": { "type": "Point", "coordinates": [ 82.6818961, 22.3874221 ] } },
|
71 |
+
{ "type": "Feature", "properties": { "Name": "LARA TPP", "Latitude": 21.757661, "Longitude": 83.457545 }, "geometry": { "type": "Point", "coordinates": [ 83.457545, 21.757661 ] } },
|
72 |
+
{ "type": "Feature", "properties": { "Name": "MAUDA TPS", "Latitude": 21.18074, "Longitude": 79.396541 }, "geometry": { "type": "Point", "coordinates": [ 79.396541, 21.18074 ] } },
|
73 |
+
{ "type": "Feature", "properties": { "Name": "SIPAT STPS", "Latitude": 22.131662, "Longitude": 82.29035 }, "geometry": { "type": "Point", "coordinates": [ 82.29035, 22.131662 ] } },
|
74 |
+
{ "type": "Feature", "properties": { "Name": "SOLAPUR STPS", "Latitude": 17.551296, "Longitude": 75.9832 }, "geometry": { "type": "Point", "coordinates": [ 75.9832, 17.551296 ] } },
|
75 |
+
{ "type": "Feature", "properties": { "Name": "VINDHYACHAL STPS", "Latitude": 24.0983, "Longitude": 82.6719 }, "geometry": { "type": "Point", "coordinates": [ 82.6719, 24.0983 ] } },
|
76 |
+
{ "type": "Feature", "properties": { "Name": "KUDGI STPP", "Latitude": 16.499546, "Longitude": 75.834632 }, "geometry": { "type": "Point", "coordinates": [ 75.834632, 16.499546 ] } },
|
77 |
+
{ "type": "Feature", "properties": { "Name": "RAMAGUNDEM STPS", "Latitude": 18.7584502, "Longitude": 79.4573172 }, "geometry": { "type": "Point", "coordinates": [ 79.4573172, 18.7584502 ] } },
|
78 |
+
{ "type": "Feature", "properties": { "Name": "SIMHADRI", "Latitude": 17.591, "Longitude": 83.09166 }, "geometry": { "type": "Point", "coordinates": [ 83.09166, 17.591 ] } },
|
79 |
+
{ "type": "Feature", "properties": { "Name": "TELANGANA STPP PH-1", "Latitude": 18.7584502, "Longitude": 79.4573172 }, "geometry": { "type": "Point", "coordinates": [ 79.4573172, 18.7584502 ] } },
|
80 |
+
{ "type": "Feature", "properties": { "Name": "BARAUNI TPS", "Latitude": 25.391376, "Longitude": 86.023488 }, "geometry": { "type": "Point", "coordinates": [ 86.023488, 25.391376 ] } },
|
81 |
+
{ "type": "Feature", "properties": { "Name": "BARH STPS", "Latitude": 25.4693, "Longitude": 85.74516 }, "geometry": { "type": "Point", "coordinates": [ 85.74516, 25.4693 ] } },
|
82 |
+
{ "type": "Feature", "properties": { "Name": "DARLIPALI STPS", "Latitude": 21.963554, "Longitude": 83.89187 }, "geometry": { "type": "Point", "coordinates": [ 83.89187, 21.963554 ] } },
|
83 |
+
{ "type": "Feature", "properties": { "Name": "FARAKKA STPS", "Latitude": 24.772729, "Longitude": 87.893707 }, "geometry": { "type": "Point", "coordinates": [ 87.893707, 24.772729 ] } },
|
84 |
+
{ "type": "Feature", "properties": { "Name": "KAHALGAON TPS", "Latitude": 25.236903, "Longitude": 87.265595 }, "geometry": { "type": "Point", "coordinates": [ 87.265595, 25.236903 ] } },
|
85 |
+
{ "type": "Feature", "properties": { "Name": "NORTH KARANPURA TPP", "Latitude": 23.850772, "Longitude": 85.012411 }, "geometry": { "type": "Point", "coordinates": [ 85.012411, 23.850772 ] } },
|
86 |
+
{ "type": "Feature", "properties": { "Name": "TALCHER STPS", "Latitude": 21.098074, "Longitude": 85.074005 }, "geometry": { "type": "Point", "coordinates": [ 85.074005, 21.098074 ] } },
|
87 |
+
{ "type": "Feature", "properties": { "Name": "BONGAIGAON TPP", "Latitude": 26.44437, "Longitude": 90.367205 }, "geometry": { "type": "Point", "coordinates": [ 90.367205, 26.44437 ] } },
|
88 |
+
{ "type": "Feature", "properties": { "Name": "INDIRA GANDHI STPP", "Latitude": 28.485091, "Longitude": 76.37316 }, "geometry": { "type": "Point", "coordinates": [ 76.37316, 28.485091 ] } },
|
89 |
+
{ "type": "Feature", "properties": { "Name": "MEJA STPP", "Latitude": 25.145867, "Longitude": 81.940096 }, "geometry": { "type": "Point", "coordinates": [ 81.940096, 25.145867 ] } },
|
90 |
+
{ "type": "Feature", "properties": { "Name": "BHILAI TPS", "Latitude": 21.184, "Longitude": 81.4237 }, "geometry": { "type": "Point", "coordinates": [ 81.4237, 21.184 ] } },
|
91 |
+
{ "type": "Feature", "properties": { "Name": "SEIONI TPP", "Latitude": 22.735479, "Longitude": 79.912341 }, "geometry": { "type": "Point", "coordinates": [ 79.912341, 22.735479 ] } },
|
92 |
+
{ "type": "Feature", "properties": { "Name": "VALLUR TPP", "Latitude": 13.237131, "Longitude": 80.301754 }, "geometry": { "type": "Point", "coordinates": [ 80.301754, 13.237131 ] } },
|
93 |
+
{ "type": "Feature", "properties": { "Name": "MUZAFFARPUR TPS", "Latitude": 26.194771, "Longitude": 85.303302 }, "geometry": { "type": "Point", "coordinates": [ 85.303302, 26.194771 ] } },
|
94 |
+
{ "type": "Feature", "properties": { "Name": "NABINAGAR STPP", "Latitude": 24.776, "Longitude": 84.158025 }, "geometry": { "type": "Point", "coordinates": [ 84.158025, 24.776 ] } },
|
95 |
+
{ "type": "Feature", "properties": { "Name": "NABINAGAR TPP", "Latitude": 24.705081, "Longitude": 84.088738 }, "geometry": { "type": "Point", "coordinates": [ 84.088738, 24.705081 ] } },
|
96 |
+
{ "type": "Feature", "properties": { "Name": "BOKARO TPS `A` EXP", "Latitude": 23.782944, "Longitude": 85.883391 }, "geometry": { "type": "Point", "coordinates": [ 85.883391, 23.782944 ] } },
|
97 |
+
{ "type": "Feature", "properties": { "Name": "CHANDRAPURA(DVC) TPS", "Latitude": 20.0063, "Longitude": 79.29 }, "geometry": { "type": "Point", "coordinates": [ 79.29, 20.0063 ] } },
|
98 |
+
{ "type": "Feature", "properties": { "Name": "DURGAPUR STEEL TPS", "Latitude": 23.531506, "Longitude": 87.249856 }, "geometry": { "type": "Point", "coordinates": [ 87.249856, 23.531506 ] } },
|
99 |
+
{ "type": "Feature", "properties": { "Name": "KODARMA TPP", "Latitude": 24.391534, "Longitude": 85.561899 }, "geometry": { "type": "Point", "coordinates": [ 85.561899, 24.391534 ] } },
|
100 |
+
{ "type": "Feature", "properties": { "Name": "MEJIA TPS", "Latitude": 23.4639, "Longitude": 87.1311 }, "geometry": { "type": "Point", "coordinates": [ 87.1311, 23.4639 ] } },
|
101 |
+
{ "type": "Feature", "properties": { "Name": "RAGHUNATHPUR TPP", "Latitude": 23.62191, "Longitude": 86.660703 }, "geometry": { "type": "Point", "coordinates": [ 86.660703, 23.62191 ] } },
|
102 |
+
{ "type": "Feature", "properties": { "Name": "NTPL TUTICORIN TPP", "Latitude": 8.760363, "Longitude": 78.171083 }, "geometry": { "type": "Point", "coordinates": [ 78.171083, 8.760363 ] } },
|
103 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED KAWAI TPP", "Latitude": 24.777997, "Longitude": 76.737144 }, "geometry": { "type": "Point", "coordinates": [ 76.737144, 24.777997 ] } },
|
104 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED RAIGARH TPP", "Latitude": 21.743775, "Longitude": 83.274093 }, "geometry": { "type": "Point", "coordinates": [ 83.274093, 21.743775 ] } },
|
105 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED RAIPUR TPP", "Latitude": 21.449918, "Longitude": 81.852474 }, "geometry": { "type": "Point", "coordinates": [ 81.852474, 21.449918 ] } },
|
106 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED TIRODA TPP", "Latitude": 21.412502, "Longitude": 79.96731 }, "geometry": { "type": "Point", "coordinates": [ 79.96731, 21.412502 ] } },
|
107 |
+
{ "type": "Feature", "properties": { "Name": "AKALTARA TPS", "Latitude": 21.960296, "Longitude": 82.409064 }, "geometry": { "type": "Point", "coordinates": [ 82.409064, 21.960296 ] } },
|
108 |
+
{ "type": "Feature", "properties": { "Name": "AMRAVATI TPS", "Latitude": 21.080316, "Longitude": 77.901242 }, "geometry": { "type": "Point", "coordinates": [ 77.901242, 21.080316 ] } },
|
109 |
+
{ "type": "Feature", "properties": { "Name": "ANPARA C TPS", "Latitude": 24.202043, "Longitude": 82.789128 }, "geometry": { "type": "Point", "coordinates": [ 82.789128, 24.202043 ] } },
|
110 |
+
{ "type": "Feature", "properties": { "Name": "ANUPPUR TPP", "Latitude": 23.073731, "Longitude": 81.784286 }, "geometry": { "type": "Point", "coordinates": [ 81.784286, 23.073731 ] } },
|
111 |
+
{ "type": "Feature", "properties": { "Name": "BALCO TPS", "Latitude": 22.3930944, "Longitude": 82.7439443 }, "geometry": { "type": "Point", "coordinates": [ 82.7439443, 22.3930944 ] } },
|
112 |
+
{ "type": "Feature", "properties": { "Name": "BANDAKHAR TPP", "Latitude": 22.340954, "Longitude": 82.430603 }, "geometry": { "type": "Point", "coordinates": [ 82.430603, 22.340954 ] } },
|
113 |
+
{ "type": "Feature", "properties": { "Name": "BARADARHA TPS", "Latitude": 21.911436, "Longitude": 83.188863 }, "geometry": { "type": "Point", "coordinates": [ 83.188863, 21.911436 ] } },
|
114 |
+
{ "type": "Feature", "properties": { "Name": "BARKHERA TPS", "Latitude": 28.55, "Longitude": 80.1 }, "geometry": { "type": "Point", "coordinates": [ 80.1, 28.55 ] } },
|
115 |
+
{ "type": "Feature", "properties": { "Name": "BELA TPS", "Latitude": 20.806389, "Longitude": 79.051944 }, "geometry": { "type": "Point", "coordinates": [ 79.051944, 20.806389 ] } },
|
116 |
+
{ "type": "Feature", "properties": { "Name": "BINA TPS", "Latitude": 24.317222, "Longitude": 78.133564 }, "geometry": { "type": "Point", "coordinates": [ 78.133564, 24.317222 ] } },
|
117 |
+
{ "type": "Feature", "properties": { "Name": "BINJKOTE TPP", "Latitude": 22.010422, "Longitude": 83.205779 }, "geometry": { "type": "Point", "coordinates": [ 83.205779, 22.010422 ] } },
|
118 |
+
{ "type": "Feature", "properties": { "Name": "BUDGE BUDGE TPS", "Latitude": 22.470344, "Longitude": 88.139949 }, "geometry": { "type": "Point", "coordinates": [ 88.139949, 22.470344 ] } },
|
119 |
+
{ "type": "Feature", "properties": { "Name": "DAHANU TPS", "Latitude": 19.9545, "Longitude": 72.7478 }, "geometry": { "type": "Point", "coordinates": [ 72.7478, 19.9545 ] } },
|
120 |
+
{ "type": "Feature", "properties": { "Name": "DERANG TPP", "Latitude": 21.127044, "Longitude": 84.980552 }, "geometry": { "type": "Point", "coordinates": [ 84.980552, 21.127044 ] } },
|
121 |
+
{ "type": "Feature", "properties": { "Name": "DHARIWAL TPP", "Latitude": 20.010588, "Longitude": 79.203433 }, "geometry": { "type": "Point", "coordinates": [ 79.203433, 20.010588 ] } },
|
122 |
+
{ "type": "Feature", "properties": { "Name": "GMR WARORA TPS", "Latitude": 20.279656, "Longitude": 78.975351 }, "geometry": { "type": "Point", "coordinates": [ 78.975351, 20.279656 ] } },
|
123 |
+
{ "type": "Feature", "properties": { "Name": "HALDIA TPP", "Latitude": 22.060459, "Longitude": 88.109748 }, "geometry": { "type": "Point", "coordinates": [ 88.109748, 22.060459 ] } },
|
124 |
+
{ "type": "Feature", "properties": { "Name": "HIRANMAYE TPP", "Latitude": 22.076989, "Longitude": 88.098413 }, "geometry": { "type": "Point", "coordinates": [ 88.098413, 22.076989 ] } },
|
125 |
+
{ "type": "Feature", "properties": { "Name": "JOJOBERA TPS", "Latitude": 22.7554, "Longitude": 86.2491 }, "geometry": { "type": "Point", "coordinates": [ 86.2491, 22.7554 ] } },
|
126 |
+
{ "type": "Feature", "properties": { "Name": "KAMALANGA TPS", "Latitude": 20.870576, "Longitude": 85.266979 }, "geometry": { "type": "Point", "coordinates": [ 85.266979, 20.870576 ] } },
|
127 |
+
{ "type": "Feature", "properties": { "Name": "KHAMBARKHERA TPS", "Latitude": 27.9, "Longitude": 80.8 }, "geometry": { "type": "Point", "coordinates": [ 80.8, 27.9 ] } },
|
128 |
+
{ "type": "Feature", "properties": { "Name": "KUNDARKI TPS", "Latitude": 27.03, "Longitude": 82.23 }, "geometry": { "type": "Point", "coordinates": [ 82.23, 27.03 ] } },
|
129 |
+
{ "type": "Feature", "properties": { "Name": "LALITPUR TPS", "Latitude": 24.795833, "Longitude": 78.646944 }, "geometry": { "type": "Point", "coordinates": [ 78.646944, 24.795833 ] } },
|
130 |
+
{ "type": "Feature", "properties": { "Name": "MAHADEV PRASAD STPP", "Latitude": 22.836504, "Longitude": 86.061294 }, "geometry": { "type": "Point", "coordinates": [ 86.061294, 22.836504 ] } },
|
131 |
+
{ "type": "Feature", "properties": { "Name": "MAHAN TPP", "Latitude": 24.008674, "Longitude": 82.41703 }, "geometry": { "type": "Point", "coordinates": [ 82.41703, 24.008674 ] } },
|
132 |
+
{ "type": "Feature", "properties": { "Name": "MAHATMA GANDHI TPS", "Latitude": 28.488143, "Longitude": 76.352534 }, "geometry": { "type": "Point", "coordinates": [ 76.352534, 28.488143 ] } },
|
133 |
+
{ "type": "Feature", "properties": { "Name": "MAITHON RB TPP", "Latitude": 23.8209, "Longitude": 86.76 }, "geometry": { "type": "Point", "coordinates": [ 86.76, 23.8209 ] } },
|
134 |
+
{ "type": "Feature", "properties": { "Name": "MAQSOODPUR TPS", "Latitude": 27.81, "Longitude": 79.94 }, "geometry": { "type": "Point", "coordinates": [ 79.94, 27.81 ] } },
|
135 |
+
{ "type": "Feature", "properties": { "Name": "NAWAPARA TPP", "Latitude": 21.906738, "Longitude": 83.128556 }, "geometry": { "type": "Point", "coordinates": [ 83.128556, 21.906738 ] } },
|
136 |
+
{ "type": "Feature", "properties": { "Name": "NIGRI TPP", "Latitude": 24.14997, "Longitude": 81.904525 }, "geometry": { "type": "Point", "coordinates": [ 81.904525, 24.14997 ] } },
|
137 |
+
{ "type": "Feature", "properties": { "Name": "OP JINDAL TPS", "Latitude": 22.104, "Longitude": 83.445 }, "geometry": { "type": "Point", "coordinates": [ 83.445, 22.104 ] } },
|
138 |
+
{ "type": "Feature", "properties": { "Name": "PAINAMPURAM TPP", "Latitude": 14.351195, "Longitude": 80.143086 }, "geometry": { "type": "Point", "coordinates": [ 80.143086, 14.351195 ] } },
|
139 |
+
{ "type": "Feature", "properties": { "Name": "PATHADI TPP", "Latitude": 22.2454, "Longitude": 82.7246 }, "geometry": { "type": "Point", "coordinates": [ 82.7246, 22.2454 ] } },
|
140 |
+
{ "type": "Feature", "properties": { "Name": "PRAYAGRAJ TPP", "Latitude": 25.196345, "Longitude": 81.658534 }, "geometry": { "type": "Point", "coordinates": [ 81.658534, 25.196345 ] } },
|
141 |
+
{ "type": "Feature", "properties": { "Name": "RAJPURA TPP", "Latitude": 30.558963, "Longitude": 76.577593 }, "geometry": { "type": "Point", "coordinates": [ 76.577593, 30.558963 ] } },
|
142 |
+
{ "type": "Feature", "properties": { "Name": "ROSA TPP Ph-I", "Latitude": 27.8194455, "Longitude": 79.9371618 }, "geometry": { "type": "Point", "coordinates": [ 79.9371618, 27.8194455 ] } },
|
143 |
+
{ "type": "Feature", "properties": { "Name": "SABARMATI (D-F STATIONS)", "Latitude": 23.070555, "Longitude": 72.593889 }, "geometry": { "type": "Point", "coordinates": [ 72.593889, 23.070555 ] } },
|
144 |
+
{ "type": "Feature", "properties": { "Name": "SASAN UMTPP", "Latitude": 23.9775233, "Longitude": 82.6264733 }, "geometry": { "type": "Point", "coordinates": [ 82.6264733, 23.9775233 ] } },
|
145 |
+
{ "type": "Feature", "properties": { "Name": "SGPL TPP", "Latitude": 14.351195, "Longitude": 80.143086 }, "geometry": { "type": "Point", "coordinates": [ 80.143086, 14.351195 ] } },
|
146 |
+
{ "type": "Feature", "properties": { "Name": "SHIRPUR TPP", "Latitude": 21.15103, "Longitude": 74.854206 }, "geometry": { "type": "Point", "coordinates": [ 74.854206, 21.15103 ] } },
|
147 |
+
{ "type": "Feature", "properties": { "Name": "SOUTHERN REPL. TPS", "Latitude": 22.549591, "Longitude": 88.291512 }, "geometry": { "type": "Point", "coordinates": [ 88.291512, 22.549591 ] } },
|
148 |
+
{ "type": "Feature", "properties": { "Name": "TALWANDI SABO TPP", "Latitude": 29.92458, "Longitude": 75.238929 }, "geometry": { "type": "Point", "coordinates": [ 75.238929, 29.92458 ] } },
|
149 |
+
{ "type": "Feature", "properties": { "Name": "TAMNAR TPP", "Latitude": 22.098747, "Longitude": 83.451312 }, "geometry": { "type": "Point", "coordinates": [ 83.451312, 22.098747 ] } },
|
150 |
+
{ "type": "Feature", "properties": { "Name": "UCHPINDA TPP", "Latitude": 21.8864, "Longitude": 83.12081 }, "geometry": { "type": "Point", "coordinates": [ 83.12081, 21.8864 ] } },
|
151 |
+
{ "type": "Feature", "properties": { "Name": "UTKAL TPP (IND BARATH)", "Latitude": 21.657942, "Longitude": 83.919513 }, "geometry": { "type": "Point", "coordinates": [ 83.919513, 21.657942 ] } },
|
152 |
+
{ "type": "Feature", "properties": { "Name": "UTRAULA TPS", "Latitude": 27.43, "Longitude": 82.18 }, "geometry": { "type": "Point", "coordinates": [ 82.18, 27.43 ] } },
|
153 |
+
{ "type": "Feature", "properties": { "Name": "VEDANTA TPP", "Latitude": 21.815743, "Longitude": 84.042036 }, "geometry": { "type": "Point", "coordinates": [ 84.042036, 21.815743 ] } },
|
154 |
+
{ "type": "Feature", "properties": { "Name": "VIZAG TPP", "Latitude": 17.563642, "Longitude": 83.138877 }, "geometry": { "type": "Point", "coordinates": [ 83.138877, 17.563642 ] } },
|
155 |
+
{ "type": "Feature", "properties": { "Name": "WARDHA WARORA TPP", "Latitude": 20.272443, "Longitude": 78.978916 }, "geometry": { "type": "Point", "coordinates": [ 78.978916, 20.272443 ] } },
|
156 |
+
{ "type": "Feature", "properties": { "Name": "SIKKA REP. TPS", "Latitude": 22.420828, "Longitude": 69.8276 }, "geometry": { "type": "Point", "coordinates": [ 69.8276, 22.420828 ] } },
|
157 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED MUNDRA TPP - III", "Latitude": 22.8234904, "Longitude": 69.5534831 }, "geometry": { "type": "Point", "coordinates": [ 69.5534831, 22.8234904 ] } },
|
158 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED MUNDRA TPP - I & II", "Latitude": 22.8234904, "Longitude": 69.5534831 }, "geometry": { "type": "Point", "coordinates": [ 69.5534831, 22.8234904 ] } },
|
159 |
+
{ "type": "Feature", "properties": { "Name": "ADANI POWER LIMITED UDUPI TPP", "Latitude": 13.1596, "Longitude": 74.8002 }, "geometry": { "type": "Point", "coordinates": [ 74.8002, 13.1596 ] } },
|
160 |
+
{ "type": "Feature", "properties": { "Name": "ITPCL TPP", "Latitude": 11.5216092, "Longitude": 79.7518447 }, "geometry": { "type": "Point", "coordinates": [ 79.7518447, 11.5216092 ] } },
|
161 |
+
{ "type": "Feature", "properties": { "Name": "JSW RATNAGIRI TPP", "Latitude": 17.296375, "Longitude": 73.213105 }, "geometry": { "type": "Point", "coordinates": [ 73.213105, 17.296375 ] } },
|
162 |
+
{ "type": "Feature", "properties": { "Name": "MUNDRA UMTPP", "Latitude": 22.8158, "Longitude": 69.5281 }, "geometry": { "type": "Point", "coordinates": [ 69.5281, 22.8158 ] } },
|
163 |
+
{ "type": "Feature", "properties": { "Name": "MUTHIARA TPP", "Latitude": 8.912716, "Longitude": 78.144965 }, "geometry": { "type": "Point", "coordinates": [ 78.144965, 8.912716 ] } },
|
164 |
+
{ "type": "Feature", "properties": { "Name": "OPG Power Generation Private Limited", "Latitude": 13.437422, "Longitude": 80.09788 }, "geometry": { "type": "Point", "coordinates": [ 80.09788, 13.437422 ] } },
|
165 |
+
{ "type": "Feature", "properties": { "Name": "SALAYA TPP", "Latitude": 22.3049, "Longitude": 69.7101 }, "geometry": { "type": "Point", "coordinates": [ 69.7101, 22.3049 ] } },
|
166 |
+
{ "type": "Feature", "properties": { "Name": "SHREE CEMENT LTD TPS", "Latitude": 26.073889, "Longitude": 74.385 }, "geometry": { "type": "Point", "coordinates": [ 74.385, 26.073889 ] } },
|
167 |
+
{ "type": "Feature", "properties": { "Name": "SIMHAPURI TPS", "Latitude": 14.204576, "Longitude": 80.086636 }, "geometry": { "type": "Point", "coordinates": [ 80.086636, 14.204576 ] } },
|
168 |
+
{ "type": "Feature", "properties": { "Name": "TORANGALLU TPS(SBU-I)", "Latitude": 15.186771, "Longitude": 76.6621387 }, "geometry": { "type": "Point", "coordinates": [ 76.6621387, 15.186771 ] } },
|
169 |
+
{ "type": "Feature", "properties": { "Name": "TORANGALLU TPS(SBU-II)", "Latitude": 15.186771, "Longitude": 76.6621387 }, "geometry": { "type": "Point", "coordinates": [ 76.6621387, 15.186771 ] } },
|
170 |
+
{ "type": "Feature", "properties": { "Name": "TROMBAY TPS", "Latitude": 19.0027, "Longitude": 72.8979 }, "geometry": { "type": "Point", "coordinates": [ 72.8979, 19.0027 ] } },
|
171 |
+
{ "type": "Feature", "properties": { "Name": "BUTIBORI TPP", "Latitude": 20.928591, "Longitude": 78.933281 }, "geometry": { "type": "Point", "coordinates": [ 78.933281, 20.928591 ] } },
|
172 |
+
{ "type": "Feature", "properties": { "Name": "MIHAN TPS", "Latitude": 21.0377, "Longitude": 78.9334 }, "geometry": { "type": "Point", "coordinates": [ 78.9334, 21.0377 ] } },
|
173 |
+
{ "type": "Feature", "properties": { "Name": "SALORA TPP", "Latitude": 22.489952, "Longitude": 82.606239 }, "geometry": { "type": "Point", "coordinates": [ 82.606239, 22.489952 ] } },
|
174 |
+
{ "type": "Feature", "properties": { "Name": "TITAGARH TPS", "Latitude": 22.731974, "Longitude": 88.370309 }, "geometry": { "type": "Point", "coordinates": [ 88.370309, 22.731974 ] } },
|
175 |
+
{ "type": "Feature", "properties": { "Name": "CHAKABURA TPP", "Latitude": 22.393653, "Longitude": 82.553249 }, "geometry": { "type": "Point", "coordinates": [ 82.553249, 22.393653 ] } },
|
176 |
+
{ "type": "Feature", "properties": { "Name": "GEPL TPP Ph-I", "Latitude": 19.92949, "Longitude": 79.133159 }, "geometry": { "type": "Point", "coordinates": [ 79.133159, 19.92949 ] } },
|
177 |
+
{ "type": "Feature", "properties": { "Name": "KASAIPALLI TPP", "Latitude": 22.38895, "Longitude": 82.5549 }, "geometry": { "type": "Point", "coordinates": [ 82.5549, 22.38895 ] } },
|
178 |
+
{ "type": "Feature", "properties": { "Name": "KATGHORA TPP", "Latitude": 22.489779, "Longitude": 82.60618 }, "geometry": { "type": "Point", "coordinates": [ 82.60618, 22.489779 ] } },
|
179 |
+
{ "type": "Feature", "properties": { "Name": "NIWARI TPP", "Latitude": 25.43, "Longitude": 79.71 }, "geometry": { "type": "Point", "coordinates": [ 79.71, 25.43 ] } },
|
180 |
+
{ "type": "Feature", "properties": { "Name": "RATIJA TPS", "Latitude": 22.339994, "Longitude": 82.492776 }, "geometry": { "type": "Point", "coordinates": [ 82.492776, 22.339994 ] } },
|
181 |
+
{ "type": "Feature", "properties": { "Name": "SVPL TPP", "Latitude": 22.292, "Longitude": 82.5254 }, "geometry": { "type": "Point", "coordinates": [ 82.5254, 22.292 ] } }
|
182 |
+
]
|
183 |
+
}
|
ISRO_Logo.png
ADDED
![]() |
SAC_Logo.png
ADDED
![]() |
Git LFS Details
|
agriculture_lab-high-resolution-logo-grayscale-transparent.png
ADDED
![]() |
app.py
ADDED
@@ -0,0 +1,739 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import json
|
3 |
+
import ee
|
4 |
+
import os
|
5 |
+
import pandas as pd
|
6 |
+
import geopandas as gpd
|
7 |
+
from datetime import datetime
|
8 |
+
import leafmap.foliumap as leafmap
|
9 |
+
import re
|
10 |
+
from shapely.geometry import base
|
11 |
+
from xml.etree import ElementTree as XET
|
12 |
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
13 |
+
import time
|
14 |
+
import matplotlib.pyplot as plt
|
15 |
+
import plotly.express as px
|
16 |
+
|
17 |
+
# Set up the page layout
|
18 |
+
st.set_page_config(layout="wide")
|
19 |
+
|
20 |
+
# Custom button styling
|
21 |
+
m = st.markdown(
|
22 |
+
"""
|
23 |
+
<style>
|
24 |
+
div.stButton > button:first-child {
|
25 |
+
background-color: #006400;
|
26 |
+
color:#ffffff;
|
27 |
+
}
|
28 |
+
</style>""",
|
29 |
+
unsafe_allow_html=True,
|
30 |
+
)
|
31 |
+
|
32 |
+
# Logo and Title
|
33 |
+
st.write(
|
34 |
+
f"""
|
35 |
+
<div style="display: flex; justify-content: space-between; align-items: center;">
|
36 |
+
<img src="https://huggingface.co/spaces/YashMK89/GEE_Calculator/resolve/main/ISRO_Logo.png" style="width: 20%; margin-right: auto;">
|
37 |
+
<img src="https://huggingface.co/spaces/YashMK89/GEE_Calculator/resolve/main/SAC_Logo.png" style="width: 20%; margin-left: auto;">
|
38 |
+
</div>
|
39 |
+
""",
|
40 |
+
unsafe_allow_html=True,
|
41 |
+
)
|
42 |
+
st.markdown(
|
43 |
+
f"""
|
44 |
+
<div style="display: flex; flex-direction: column; align-items: center;">
|
45 |
+
<img src="https://huggingface.co/spaces/YashMK89/GEE_Calculator/resolve/main/SATRANG.png" style="width: 30%;">
|
46 |
+
<h3 style="text-align: center; margin: 0;">( Spatial and Temporal Aggregation for Remote-sensing Analysis of GEE Data )</h3>
|
47 |
+
</div>
|
48 |
+
<hr>
|
49 |
+
""",
|
50 |
+
unsafe_allow_html=True,
|
51 |
+
)
|
52 |
+
|
53 |
+
# Authenticate and initialize Earth Engine
|
54 |
+
earthengine_credentials = os.environ.get("EE_Authentication")
|
55 |
+
os.makedirs(os.path.expanduser("~/.config/earthengine/"), exist_ok=True)
|
56 |
+
with open(os.path.expanduser("~/.config/earthengine/credentials"), "w") as f:
|
57 |
+
f.write(earthengine_credentials)
|
58 |
+
ee.Initialize(project='ee-yashsacisro24')
|
59 |
+
|
60 |
+
# Helper function to get reducer
|
61 |
+
def get_reducer(reducer_name):
|
62 |
+
reducers = {
|
63 |
+
'mean': ee.Reducer.mean(),
|
64 |
+
'sum': ee.Reducer.sum(),
|
65 |
+
'median': ee.Reducer.median(),
|
66 |
+
'min': ee.Reducer.min(),
|
67 |
+
'max': ee.Reducer.max(),
|
68 |
+
'count': ee.Reducer.count(),
|
69 |
+
}
|
70 |
+
return reducers.get(reducer_name.lower(), ee.Reducer.mean())
|
71 |
+
|
72 |
+
# Function to convert geometry to Earth Engine format
|
73 |
+
def convert_to_ee_geometry(geometry):
|
74 |
+
if isinstance(geometry, base.BaseGeometry):
|
75 |
+
if geometry.is_valid:
|
76 |
+
geojson = geometry.__geo_interface__
|
77 |
+
return ee.Geometry(geojson)
|
78 |
+
else:
|
79 |
+
raise ValueError("Invalid geometry: The polygon geometry is not valid.")
|
80 |
+
elif isinstance(geometry, dict) or isinstance(geometry, str):
|
81 |
+
try:
|
82 |
+
if isinstance(geometry, str):
|
83 |
+
geometry = json.loads(geometry)
|
84 |
+
if 'type' in geometry and 'coordinates' in geometry:
|
85 |
+
return ee.Geometry(geometry)
|
86 |
+
else:
|
87 |
+
raise ValueError("GeoJSON format is invalid.")
|
88 |
+
except Exception as e:
|
89 |
+
raise ValueError(f"Error parsing GeoJSON: {e}")
|
90 |
+
elif isinstance(geometry, str) and geometry.lower().endswith(".kml"):
|
91 |
+
try:
|
92 |
+
tree = XET.parse(geometry)
|
93 |
+
kml_root = tree.getroot()
|
94 |
+
kml_namespace = {'kml': 'http://www.opengis.net/kml/2.2'}
|
95 |
+
coordinates = kml_root.findall(".//kml:coordinates", kml_namespace)
|
96 |
+
if coordinates:
|
97 |
+
coords_text = coordinates[0].text.strip()
|
98 |
+
coords = coords_text.split()
|
99 |
+
coords = [tuple(map(float, coord.split(','))) for coord in coords]
|
100 |
+
geojson = {"type": "Polygon", "coordinates": [coords]}
|
101 |
+
return ee.Geometry(geojson)
|
102 |
+
else:
|
103 |
+
raise ValueError("KML does not contain valid coordinates.")
|
104 |
+
except Exception as e:
|
105 |
+
raise ValueError(f"Error parsing KML: {e}")
|
106 |
+
else:
|
107 |
+
raise ValueError("Unsupported geometry input type. Supported types are Shapely, GeoJSON, and KML.")
|
108 |
+
|
109 |
+
# Function to calculate custom formula
|
110 |
+
def calculate_custom_formula(image, geometry, selected_bands, custom_formula, reducer_choice, dataset_id, user_scale=None):
|
111 |
+
try:
|
112 |
+
# Determine the scale: Use user-defined scale if provided, otherwise use dataset's native resolution
|
113 |
+
default_scale = ee.ImageCollection(dataset_id).first().select(0).projection().nominalScale().getInfo()
|
114 |
+
scale = user_scale if user_scale is not None else default_scale
|
115 |
+
band_values = {}
|
116 |
+
band_names = image.bandNames().getInfo()
|
117 |
+
for band in selected_bands:
|
118 |
+
if band not in band_names:
|
119 |
+
raise ValueError(f"Band '{band}' not found in the dataset.")
|
120 |
+
band_values[band] = image.select(band)
|
121 |
+
reducer = get_reducer(reducer_choice)
|
122 |
+
reduced_values = {}
|
123 |
+
for band in selected_bands:
|
124 |
+
value = band_values[band].reduceRegion(
|
125 |
+
reducer=reducer,
|
126 |
+
geometry=geometry,
|
127 |
+
scale=scale
|
128 |
+
).get(band).getInfo()
|
129 |
+
reduced_values[band] = float(value if value is not None else 0)
|
130 |
+
formula = custom_formula
|
131 |
+
for band in selected_bands:
|
132 |
+
formula = formula.replace(band, str(reduced_values[band]))
|
133 |
+
result = eval(formula, {"__builtins__": {}}, reduced_values)
|
134 |
+
if not isinstance(result, (int, float)):
|
135 |
+
raise ValueError("Formula did not result in a numeric value.")
|
136 |
+
return ee.Image.constant(result).rename('custom_result')
|
137 |
+
except ZeroDivisionError:
|
138 |
+
st.error("Error: Division by zero in the formula.")
|
139 |
+
return ee.Image(0).rename('custom_result').set('error', 'Division by zero')
|
140 |
+
except SyntaxError:
|
141 |
+
st.error(f"Error: Invalid syntax in formula '{custom_formula}'.")
|
142 |
+
return ee.Image(0).rename('custom_result').set('error', 'Invalid syntax')
|
143 |
+
except ValueError as e:
|
144 |
+
st.error(f"Error: {str(e)}")
|
145 |
+
return ee.Image(0).rename('custom_result').set('error', str(e))
|
146 |
+
except Exception as e:
|
147 |
+
st.error(f"Unexpected error: {e}")
|
148 |
+
return ee.Image(0).rename('custom_result').set('error', str(e))
|
149 |
+
|
150 |
+
# Aggregation functions
|
151 |
+
def aggregate_data_custom(collection):
|
152 |
+
collection = collection.map(lambda image: image.set('day', ee.Date(image.get('system:time_start')).format('YYYY-MM-dd')))
|
153 |
+
grouped_by_day = collection.aggregate_array('day').distinct()
|
154 |
+
def calculate_daily_mean(day):
|
155 |
+
daily_collection = collection.filter(ee.Filter.eq('day', day))
|
156 |
+
daily_mean = daily_collection.mean()
|
157 |
+
return daily_mean.set('day', day)
|
158 |
+
daily_images = ee.List(grouped_by_day.map(calculate_daily_mean))
|
159 |
+
return ee.ImageCollection(daily_images)
|
160 |
+
|
161 |
+
def aggregate_data_daily(collection):
|
162 |
+
def set_day_start(image):
|
163 |
+
date = ee.Date(image.get('system:time_start'))
|
164 |
+
day_start = date.format('YYYY-MM-dd')
|
165 |
+
return image.set('day_start', day_start)
|
166 |
+
collection = collection.map(set_day_start)
|
167 |
+
grouped_by_day = collection.aggregate_array('day_start').distinct()
|
168 |
+
def calculate_daily_mean(day_start):
|
169 |
+
daily_collection = collection.filter(ee.Filter.eq('day_start', day_start))
|
170 |
+
daily_mean = daily_collection.mean()
|
171 |
+
return daily_mean.set('day_start', day_start)
|
172 |
+
daily_images = ee.List(grouped_by_day.map(calculate_daily_mean))
|
173 |
+
return ee.ImageCollection(daily_images)
|
174 |
+
|
175 |
+
def aggregate_data_weekly(collection, start_date_str, end_date_str):
|
176 |
+
start_date = ee.Date(start_date_str)
|
177 |
+
end_date = ee.Date(end_date_str)
|
178 |
+
days_diff = end_date.difference(start_date, 'day')
|
179 |
+
num_weeks = days_diff.divide(7).ceil().getInfo()
|
180 |
+
weekly_images = []
|
181 |
+
for week in range(num_weeks):
|
182 |
+
week_start = start_date.advance(week * 7, 'day')
|
183 |
+
week_end = week_start.advance(7, 'day')
|
184 |
+
weekly_collection = collection.filterDate(week_start, week_end)
|
185 |
+
if weekly_collection.size().getInfo() > 0:
|
186 |
+
weekly_mean = weekly_collection.mean()
|
187 |
+
weekly_mean = weekly_mean.set('week_start', week_start.format('YYYY-MM-dd'))
|
188 |
+
weekly_images.append(weekly_mean)
|
189 |
+
return ee.ImageCollection.fromImages(weekly_images)
|
190 |
+
|
191 |
+
def aggregate_data_monthly(collection, start_date, end_date):
|
192 |
+
collection = collection.filterDate(start_date, end_date)
|
193 |
+
collection = collection.map(lambda image: image.set('month', ee.Date(image.get('system:time_start')).format('YYYY-MM')))
|
194 |
+
grouped_by_month = collection.aggregate_array('month').distinct()
|
195 |
+
def calculate_monthly_mean(month):
|
196 |
+
monthly_collection = collection.filter(ee.Filter.eq('month', month))
|
197 |
+
monthly_mean = monthly_collection.mean()
|
198 |
+
return monthly_mean.set('month', month)
|
199 |
+
monthly_images = ee.List(grouped_by_month.map(calculate_monthly_mean))
|
200 |
+
return ee.ImageCollection(monthly_images)
|
201 |
+
|
202 |
+
def aggregate_data_yearly(collection):
|
203 |
+
collection = collection.map(lambda image: image.set('year', ee.Date(image.get('system:time_start')).format('YYYY')))
|
204 |
+
grouped_by_year = collection.aggregate_array('year').distinct()
|
205 |
+
def calculate_yearly_mean(year):
|
206 |
+
yearly_collection = collection.filter(ee.Filter.eq('year', year))
|
207 |
+
yearly_mean = yearly_collection.mean()
|
208 |
+
return yearly_mean.set('year', year)
|
209 |
+
yearly_images = ee.List(grouped_by_year.map(calculate_yearly_mean))
|
210 |
+
return ee.ImageCollection(yearly_images)
|
211 |
+
|
212 |
+
def preprocess_collection(collection, tile_cloud_threshold, pixel_cloud_threshold):
|
213 |
+
def filter_tile(image):
|
214 |
+
cloud_percentage = calculate_cloud_percentage(image, cloud_band='QA60')
|
215 |
+
return image.set('cloud_percentage', cloud_percentage).updateMask(cloud_percentage.lt(tile_cloud_threshold))
|
216 |
+
def mask_cloudy_pixels(image):
|
217 |
+
qa60 = image.select('QA60')
|
218 |
+
opaque_clouds = qa60.bitwiseAnd(1 << 10)
|
219 |
+
cirrus_clouds = qa60.bitwiseAnd(1 << 11)
|
220 |
+
cloud_mask = opaque_clouds.Or(cirrus_clouds)
|
221 |
+
clear_pixels = cloud_mask.Not()
|
222 |
+
return image.updateMask(clear_pixels)
|
223 |
+
filtered_collection = collection.map(filter_tile)
|
224 |
+
masked_collection = filtered_collection.map(mask_cloudy_pixels)
|
225 |
+
return masked_collection
|
226 |
+
|
227 |
+
def process_single_geometry(row, start_date_str, end_date_str, dataset_id, selected_bands, reducer_choice, shape_type, aggregation_period, custom_formula, original_lat_col, original_lon_col, kernel_size=None, include_boundary=None, user_scale=None):
|
228 |
+
if shape_type.lower() == "point":
|
229 |
+
latitude = row.get('latitude')
|
230 |
+
longitude = row.get('longitude')
|
231 |
+
if pd.isna(latitude) or pd.isna(longitude):
|
232 |
+
return None
|
233 |
+
location_name = row.get('name', f"Location_{row.name}")
|
234 |
+
if kernel_size == "3x3 Kernel":
|
235 |
+
buffer_size = 45
|
236 |
+
roi = ee.Geometry.Point([longitude, latitude]).buffer(buffer_size).bounds()
|
237 |
+
elif kernel_size == "5x5 Kernel":
|
238 |
+
buffer_size = 75
|
239 |
+
roi = ee.Geometry.Point([longitude, latitude]).buffer(buffer_size).bounds()
|
240 |
+
else:
|
241 |
+
roi = ee.Geometry.Point([longitude, latitude])
|
242 |
+
elif shape_type.lower() == "polygon":
|
243 |
+
polygon_geometry = row.get('geometry')
|
244 |
+
location_name = row.get('name', f"Polygon_{row.name}")
|
245 |
+
try:
|
246 |
+
roi = convert_to_ee_geometry(polygon_geometry)
|
247 |
+
if not include_boundary:
|
248 |
+
roi = roi.buffer(-30).bounds()
|
249 |
+
except ValueError:
|
250 |
+
return None
|
251 |
+
collection = ee.ImageCollection(dataset_id) \
|
252 |
+
.filterDate(ee.Date(start_date_str), ee.Date(end_date_str)) \
|
253 |
+
.filterBounds(roi)
|
254 |
+
if aggregation_period.lower() == 'custom (start date to end date)':
|
255 |
+
collection = aggregate_data_custom(collection)
|
256 |
+
elif aggregation_period.lower() == 'daily':
|
257 |
+
collection = aggregate_data_daily(collection)
|
258 |
+
elif aggregation_period.lower() == 'weekly':
|
259 |
+
collection = aggregate_data_weekly(collection, start_date_str, end_date_str)
|
260 |
+
elif aggregation_period.lower() == 'monthly':
|
261 |
+
collection = aggregate_data_monthly(collection, start_date_str, end_date_str)
|
262 |
+
elif aggregation_period.lower() == 'yearly':
|
263 |
+
collection = aggregate_data_yearly(collection)
|
264 |
+
image_list = collection.toList(collection.size())
|
265 |
+
processed_weeks = set()
|
266 |
+
aggregated_results = []
|
267 |
+
for i in range(image_list.size().getInfo()):
|
268 |
+
image = ee.Image(image_list.get(i))
|
269 |
+
if aggregation_period.lower() == 'custom (start date to end date)':
|
270 |
+
timestamp = image.get('day')
|
271 |
+
period_label = 'Date'
|
272 |
+
date = ee.Date(timestamp).format('YYYY-MM-dd').getInfo()
|
273 |
+
elif aggregation_period.lower() == 'daily':
|
274 |
+
timestamp = image.get('day_start')
|
275 |
+
period_label = 'Date'
|
276 |
+
date = ee.String(timestamp).getInfo()
|
277 |
+
elif aggregation_period.lower() == 'weekly':
|
278 |
+
timestamp = image.get('week_start')
|
279 |
+
period_label = 'Week'
|
280 |
+
date = ee.String(timestamp).getInfo()
|
281 |
+
if (pd.to_datetime(date) < pd.to_datetime(start_date_str) or
|
282 |
+
pd.to_datetime(date) > pd.to_datetime(end_date_str) or
|
283 |
+
date in processed_weeks):
|
284 |
+
continue
|
285 |
+
processed_weeks.add(date)
|
286 |
+
elif aggregation_period.lower() == 'monthly':
|
287 |
+
timestamp = image.get('month')
|
288 |
+
period_label = 'Month'
|
289 |
+
date = ee.Date(timestamp).format('YYYY-MM').getInfo()
|
290 |
+
elif aggregation_period.lower() == 'yearly':
|
291 |
+
timestamp = image.get('year')
|
292 |
+
period_label = 'Year'
|
293 |
+
date = ee.Date(timestamp).format('YYYY').getInfo()
|
294 |
+
index_image = calculate_custom_formula(image, roi, selected_bands, custom_formula, reducer_choice, dataset_id, user_scale=user_scale)
|
295 |
+
try:
|
296 |
+
index_value = index_image.reduceRegion(
|
297 |
+
reducer=get_reducer(reducer_choice),
|
298 |
+
geometry=roi,
|
299 |
+
scale=user_scale
|
300 |
+
).get('custom_result')
|
301 |
+
calculated_value = index_value.getInfo()
|
302 |
+
if isinstance(calculated_value, (int, float)):
|
303 |
+
result = {
|
304 |
+
'Location Name': location_name,
|
305 |
+
period_label: date,
|
306 |
+
'Start Date': start_date_str,
|
307 |
+
'End Date': end_date_str,
|
308 |
+
'Calculated Value': calculated_value
|
309 |
+
}
|
310 |
+
if shape_type.lower() == 'point':
|
311 |
+
result[original_lat_col] = latitude
|
312 |
+
result[original_lon_col] = longitude
|
313 |
+
aggregated_results.append(result)
|
314 |
+
except Exception as e:
|
315 |
+
st.error(f"Error retrieving value for {location_name}: {e}")
|
316 |
+
return aggregated_results
|
317 |
+
|
318 |
+
def process_aggregation(locations_df, start_date_str, end_date_str, dataset_id, selected_bands, reducer_choice, shape_type, aggregation_period, original_lat_col, original_lon_col, custom_formula="", kernel_size=None, include_boundary=None, tile_cloud_threshold=0, pixel_cloud_threshold=0, user_scale=None):
|
319 |
+
aggregated_results = []
|
320 |
+
total_steps = len(locations_df)
|
321 |
+
progress_bar = st.progress(0)
|
322 |
+
progress_text = st.empty()
|
323 |
+
start_time = time.time()
|
324 |
+
raw_collection = ee.ImageCollection(dataset_id) \
|
325 |
+
.filterDate(ee.Date(start_date_str), ee.Date(end_date_str))
|
326 |
+
st.write(f"Original Collection Size: {raw_collection.size().getInfo()}")
|
327 |
+
if tile_cloud_threshold > 0 or pixel_cloud_threshold > 0:
|
328 |
+
raw_collection = preprocess_collection(raw_collection, tile_cloud_threshold, pixel_cloud_threshold)
|
329 |
+
st.write(f"Preprocessed Collection Size: {raw_collection.size().getInfo()}")
|
330 |
+
with ThreadPoolExecutor(max_workers=10) as executor:
|
331 |
+
futures = []
|
332 |
+
for idx, row in locations_df.iterrows():
|
333 |
+
future = executor.submit(
|
334 |
+
process_single_geometry,
|
335 |
+
row,
|
336 |
+
start_date_str,
|
337 |
+
end_date_str,
|
338 |
+
dataset_id,
|
339 |
+
selected_bands,
|
340 |
+
reducer_choice,
|
341 |
+
shape_type,
|
342 |
+
aggregation_period,
|
343 |
+
custom_formula,
|
344 |
+
original_lat_col,
|
345 |
+
original_lon_col,
|
346 |
+
kernel_size,
|
347 |
+
include_boundary,
|
348 |
+
user_scale=user_scale
|
349 |
+
)
|
350 |
+
futures.append(future)
|
351 |
+
completed = 0
|
352 |
+
for future in as_completed(futures):
|
353 |
+
result = future.result()
|
354 |
+
if result:
|
355 |
+
aggregated_results.extend(result)
|
356 |
+
completed += 1
|
357 |
+
progress_percentage = completed / total_steps
|
358 |
+
progress_bar.progress(progress_percentage)
|
359 |
+
progress_text.markdown(f"Processing: {int(progress_percentage * 100)}%")
|
360 |
+
end_time = time.time()
|
361 |
+
processing_time = end_time - start_time
|
362 |
+
if aggregated_results:
|
363 |
+
result_df = pd.DataFrame(aggregated_results)
|
364 |
+
if aggregation_period.lower() == 'custom (start date to end date)':
|
365 |
+
agg_dict = {
|
366 |
+
'Start Date': 'first',
|
367 |
+
'End Date': 'first',
|
368 |
+
'Calculated Value': 'mean'
|
369 |
+
}
|
370 |
+
if shape_type.lower() == 'point':
|
371 |
+
agg_dict[original_lat_col] = 'first'
|
372 |
+
agg_dict[original_lon_col] = 'first'
|
373 |
+
aggregated_output = result_df.groupby('Location Name').agg(agg_dict).reset_index()
|
374 |
+
aggregated_output['Date Range'] = aggregated_output['Start Date'] + " to " + aggregated_output['End Date']
|
375 |
+
aggregated_output.rename(columns={'Calculated Value': 'Aggregated Value'}, inplace=True)
|
376 |
+
return aggregated_output.to_dict(orient='records'), processing_time
|
377 |
+
else:
|
378 |
+
return result_df.to_dict(orient='records'), processing_time
|
379 |
+
return [], processing_time
|
380 |
+
|
381 |
+
# Streamlit App Logic
|
382 |
+
st.markdown("<h5>Image Collection</h5>", unsafe_allow_html=True)
|
383 |
+
imagery_base = st.selectbox("Select Imagery Base", ["Sentinel", "Landsat", "MODIS", "VIIRS", "Custom Input"], index=0)
|
384 |
+
data = {}
|
385 |
+
if imagery_base == "Sentinel":
|
386 |
+
dataset_file = "sentinel_datasets.json"
|
387 |
+
try:
|
388 |
+
with open(dataset_file) as f:
|
389 |
+
data = json.load(f)
|
390 |
+
except FileNotFoundError:
|
391 |
+
st.error(f"Dataset file '{dataset_file}' not found.")
|
392 |
+
data = {}
|
393 |
+
elif imagery_base == "Landsat":
|
394 |
+
dataset_file = "landsat_datasets.json"
|
395 |
+
try:
|
396 |
+
with open(dataset_file) as f:
|
397 |
+
data = json.load(f)
|
398 |
+
except FileNotFoundError:
|
399 |
+
st.error(f"Dataset file '{dataset_file}' not found.")
|
400 |
+
data = {}
|
401 |
+
elif imagery_base == "MODIS":
|
402 |
+
dataset_file = "modis_datasets.json"
|
403 |
+
try:
|
404 |
+
with open(dataset_file) as f:
|
405 |
+
data = json.load(f)
|
406 |
+
except FileNotFoundError:
|
407 |
+
st.error(f"Dataset file '{dataset_file}' not found.")
|
408 |
+
data = {}
|
409 |
+
elif imagery_base == "VIIRS":
|
410 |
+
dataset_file = "viirs_datasets.json"
|
411 |
+
try:
|
412 |
+
with open(dataset_file) as f:
|
413 |
+
data = json.load(f)
|
414 |
+
except FileNotFoundError:
|
415 |
+
st.error(f"Dataset file '{dataset_file}' not found.")
|
416 |
+
data = {}
|
417 |
+
elif imagery_base == "Custom Input":
|
418 |
+
custom_dataset_id = st.text_input("Enter Custom Earth Engine Dataset ID (e.g., AHN/AHN4)", value="")
|
419 |
+
if custom_dataset_id:
|
420 |
+
try:
|
421 |
+
if custom_dataset_id.startswith("ee.ImageCollection("):
|
422 |
+
custom_dataset_id = custom_dataset_id.replace("ee.ImageCollection('", "").replace("')", "")
|
423 |
+
collection = ee.ImageCollection(custom_dataset_id)
|
424 |
+
band_names = collection.first().bandNames().getInfo()
|
425 |
+
data = {
|
426 |
+
f"Custom Dataset: {custom_dataset_id}": {
|
427 |
+
"sub_options": {custom_dataset_id: f"Custom Dataset ({custom_dataset_id})"},
|
428 |
+
"bands": {custom_dataset_id: band_names}
|
429 |
+
}
|
430 |
+
}
|
431 |
+
st.write(f"Fetched bands for {custom_dataset_id}: {', '.join(band_names)}")
|
432 |
+
except Exception as e:
|
433 |
+
st.error(f"Error fetching dataset: {str(e)}. Please check the dataset ID and ensure it's valid in Google Earth Engine.")
|
434 |
+
data = {}
|
435 |
+
else:
|
436 |
+
st.warning("Please enter a custom dataset ID to proceed.")
|
437 |
+
data = {}
|
438 |
+
if not data:
|
439 |
+
st.error("No valid dataset available. Please check your inputs.")
|
440 |
+
st.stop()
|
441 |
+
|
442 |
+
st.markdown("<hr><h5><b>{}</b></h5>".format(imagery_base), unsafe_allow_html=True)
|
443 |
+
main_selection = st.selectbox(f"Select {imagery_base} Dataset Category", list(data.keys()))
|
444 |
+
sub_selection = None
|
445 |
+
dataset_id = None
|
446 |
+
if main_selection:
|
447 |
+
sub_options = data[main_selection]["sub_options"]
|
448 |
+
sub_selection = st.selectbox(f"Select Specific {imagery_base} Dataset ID", list(sub_options.keys()))
|
449 |
+
if sub_selection:
|
450 |
+
st.write(f"You selected: {main_selection} -> {sub_options[sub_selection]}")
|
451 |
+
st.write(f"Dataset ID: {sub_selection}")
|
452 |
+
dataset_id = sub_selection
|
453 |
+
|
454 |
+
st.markdown("<hr><h5><b>Earth Engine Index Calculator</b></h5>", unsafe_allow_html=True)
|
455 |
+
if main_selection and sub_selection:
|
456 |
+
dataset_bands = data[main_selection]["bands"].get(sub_selection, [])
|
457 |
+
st.write(f"Available Bands for {sub_options[sub_selection]}: {', '.join(dataset_bands)}")
|
458 |
+
selected_bands = st.multiselect(
|
459 |
+
"Select 1 or 2 Bands for Calculation",
|
460 |
+
options=dataset_bands,
|
461 |
+
default=[dataset_bands[0]] if dataset_bands else [],
|
462 |
+
help=f"Select 1 or 2 bands from: {', '.join(dataset_bands)}"
|
463 |
+
)
|
464 |
+
if len(selected_bands) < 1:
|
465 |
+
st.warning("Please select at least one band.")
|
466 |
+
st.stop()
|
467 |
+
if selected_bands:
|
468 |
+
if len(selected_bands) == 1:
|
469 |
+
default_formula = f"{selected_bands[0]}"
|
470 |
+
example = f"'{selected_bands[0]} * 2' or '{selected_bands[0]} + 1'"
|
471 |
+
else:
|
472 |
+
default_formula = f"({selected_bands[0]} - {selected_bands[1]}) / ({selected_bands[0]} + {selected_bands[1]})"
|
473 |
+
example = f"'{selected_bands[0]} * {selected_bands[1]} / 2' or '({selected_bands[0]} - {selected_bands[1]}) / ({selected_bands[0]} + {selected_bands[1]})'"
|
474 |
+
custom_formula = st.text_input(
|
475 |
+
"Enter Custom Formula (e.g (B8 - B4) / (B8 + B4) , B4*B3/2)",
|
476 |
+
value=default_formula,
|
477 |
+
help=f"Use only these bands: {', '.join(selected_bands)}. Examples: {example}"
|
478 |
+
)
|
479 |
+
def validate_formula(formula, selected_bands):
|
480 |
+
allowed_chars = set(" +-*/()0123456789.")
|
481 |
+
terms = re.findall(r'[a-zA-Z][a-zA-Z0-9_]*', formula)
|
482 |
+
invalid_terms = [term for term in terms if term not in selected_bands]
|
483 |
+
if invalid_terms:
|
484 |
+
return False, f"Invalid terms in formula: {', '.join(invalid_terms)}. Use only {', '.join(selected_bands)}."
|
485 |
+
if not all(char in allowed_chars or char in ''.join(selected_bands) for char in formula):
|
486 |
+
return False, "Formula contains invalid characters. Use only bands, numbers, and operators (+, -, *, /, ())"
|
487 |
+
return True, ""
|
488 |
+
is_valid, error_message = validate_formula(custom_formula, selected_bands)
|
489 |
+
if not is_valid:
|
490 |
+
st.error(error_message)
|
491 |
+
st.stop()
|
492 |
+
elif not custom_formula:
|
493 |
+
st.warning("Please enter a custom formula to proceed.")
|
494 |
+
st.stop()
|
495 |
+
st.write(f"Custom Formula: {custom_formula}")
|
496 |
+
|
497 |
+
reducer_choice = st.selectbox(
|
498 |
+
"Select Reducer (e.g, mean , sum , median , min , max , count)",
|
499 |
+
['mean', 'sum', 'median', 'min', 'max', 'count'],
|
500 |
+
index=0
|
501 |
+
)
|
502 |
+
start_date = st.date_input("Start Date", value=pd.to_datetime('2024-11-01'))
|
503 |
+
end_date = st.date_input("End Date", value=pd.to_datetime('2024-12-01'))
|
504 |
+
start_date_str = start_date.strftime('%Y-%m-%d')
|
505 |
+
end_date_str = end_date.strftime('%Y-%m-%d')
|
506 |
+
|
507 |
+
if imagery_base == "Sentinel" and "Sentinel-2" in sub_options[sub_selection]:
|
508 |
+
st.markdown("<h5>Cloud Filtering</h5>", unsafe_allow_html=True)
|
509 |
+
tile_cloud_threshold = st.slider(
|
510 |
+
"Select Maximum Tile-Based Cloud Coverage Threshold (%)",
|
511 |
+
min_value=0,
|
512 |
+
max_value=100,
|
513 |
+
value=20,
|
514 |
+
step=5,
|
515 |
+
help="Tiles with cloud coverage exceeding this threshold will be excluded."
|
516 |
+
)
|
517 |
+
pixel_cloud_threshold = st.slider(
|
518 |
+
"Select Maximum Pixel-Based Cloud Coverage Threshold (%)",
|
519 |
+
min_value=0,
|
520 |
+
max_value=100,
|
521 |
+
value=10,
|
522 |
+
step=5,
|
523 |
+
help="Individual pixels with cloud coverage exceeding this threshold will be masked."
|
524 |
+
)
|
525 |
+
|
526 |
+
aggregation_period = st.selectbox(
|
527 |
+
"Select Aggregation Period (e.g, Custom(Start Date to End Date) , Daily , Weekly , Monthly , Yearly)",
|
528 |
+
["Custom (Start Date to End Date)", "Daily", "Weekly", "Monthly", "Yearly"],
|
529 |
+
index=0
|
530 |
+
)
|
531 |
+
shape_type = st.selectbox("Do you want to process 'Point' or 'Polygon' data?", ["Point", "Polygon"])
|
532 |
+
kernel_size = None
|
533 |
+
include_boundary = None
|
534 |
+
if shape_type.lower() == "point":
|
535 |
+
kernel_size = st.selectbox(
|
536 |
+
"Select Calculation Area(e.g, Point , 3x3 Kernel , 5x5 Kernel)",
|
537 |
+
["Point", "3x3 Kernel", "5x5 Kernel"],
|
538 |
+
index=0,
|
539 |
+
help="Choose 'Point' for exact point calculation, or a kernel size for area averaging."
|
540 |
+
)
|
541 |
+
elif shape_type.lower() == "polygon":
|
542 |
+
include_boundary = st.checkbox(
|
543 |
+
"Include Boundary Pixels",
|
544 |
+
value=True,
|
545 |
+
help="Check to include pixels on the polygon boundary; uncheck to exclude them."
|
546 |
+
)
|
547 |
+
|
548 |
+
st.markdown("<h5>Calculation Scale</h5>", unsafe_allow_html=True)
|
549 |
+
default_scale = ee.ImageCollection(dataset_id).first().select(0).projection().nominalScale().getInfo()
|
550 |
+
user_scale = st.number_input(
|
551 |
+
"Enter Calculation Scale (meters) [Leave blank to use dataset's default scale]",
|
552 |
+
min_value=1.0,
|
553 |
+
value=float(default_scale),
|
554 |
+
help=f"Default scale for this dataset is {default_scale} meters. Adjust if needed."
|
555 |
+
)
|
556 |
+
|
557 |
+
file_upload = st.file_uploader(f"Upload your {shape_type} data (CSV, GeoJSON, KML)", type=["csv", "geojson", "kml"])
|
558 |
+
locations_df = pd.DataFrame()
|
559 |
+
original_lat_col = None
|
560 |
+
original_lon_col = None
|
561 |
+
if file_upload is not None:
|
562 |
+
if shape_type.lower() == "point":
|
563 |
+
if file_upload.name.endswith('.csv'):
|
564 |
+
locations_df = pd.read_csv(file_upload)
|
565 |
+
st.write("Preview of your uploaded data (first 5 rows):")
|
566 |
+
st.dataframe(locations_df.head())
|
567 |
+
all_columns = locations_df.columns.tolist()
|
568 |
+
col1, col2 = st.columns(2)
|
569 |
+
with col1:
|
570 |
+
original_lat_col = st.selectbox(
|
571 |
+
"Select Latitude Column",
|
572 |
+
options=all_columns,
|
573 |
+
index=all_columns.index('latitude') if 'latitude' in all_columns else 0,
|
574 |
+
help="Select the column containing latitude values"
|
575 |
+
)
|
576 |
+
with col2:
|
577 |
+
original_lon_col = st.selectbox(
|
578 |
+
"Select Longitude Column",
|
579 |
+
options=all_columns,
|
580 |
+
index=all_columns.index('longitude') if 'longitude' in all_columns else 0,
|
581 |
+
help="Select the column containing longitude values"
|
582 |
+
)
|
583 |
+
if not pd.api.types.is_numeric_dtype(locations_df[original_lat_col]) or not pd.api.types.is_numeric_dtype(locations_df[original_lon_col]):
|
584 |
+
st.error("Error: Selected Latitude and Longitude columns must contain numeric values")
|
585 |
+
st.stop()
|
586 |
+
locations_df = locations_df.rename(columns={
|
587 |
+
original_lat_col: 'latitude',
|
588 |
+
original_lon_col: 'longitude'
|
589 |
+
})
|
590 |
+
elif file_upload.name.endswith('.geojson'):
|
591 |
+
locations_df = gpd.read_file(file_upload)
|
592 |
+
if 'geometry' in locations_df.columns:
|
593 |
+
locations_df['latitude'] = locations_df['geometry'].y
|
594 |
+
locations_df['longitude'] = locations_df['geometry'].x
|
595 |
+
original_lat_col = 'latitude'
|
596 |
+
original_lon_col = 'longitude'
|
597 |
+
else:
|
598 |
+
st.error("GeoJSON file doesn't contain geometry column")
|
599 |
+
st.stop()
|
600 |
+
elif file_upload.name.endswith('.kml'):
|
601 |
+
kml_string = file_upload.read().decode('utf-8')
|
602 |
+
try:
|
603 |
+
root = XET.fromstring(kml_string)
|
604 |
+
ns = {'kml': 'http://www.opengis.net/kml/2.2'}
|
605 |
+
points = []
|
606 |
+
for placemark in root.findall('.//kml:Placemark', ns):
|
607 |
+
name = placemark.findtext('kml:name', default=f"Point_{len(points)}", namespaces=ns)
|
608 |
+
coords_elem = placemark.find('.//kml:Point/kml:coordinates', ns)
|
609 |
+
if coords_elem is not None:
|
610 |
+
coords_text = coords_elem.text.strip()
|
611 |
+
coords = [c.strip() for c in coords_text.split(',')]
|
612 |
+
if len(coords) >= 2:
|
613 |
+
lon, lat = float(coords[0]), float(coords[1])
|
614 |
+
points.append({'name': name, 'geometry': f"POINT ({lon} {lat})"})
|
615 |
+
if not points:
|
616 |
+
st.error("No valid Point data found in the KML file.")
|
617 |
+
else:
|
618 |
+
locations_df = gpd.GeoDataFrame(points, geometry=gpd.GeoSeries.from_wkt([p['geometry'] for p in points]), crs="EPSG:4326")
|
619 |
+
locations_df['latitude'] = locations_df['geometry'].y
|
620 |
+
locations_df['longitude'] = locations_df['geometry'].x
|
621 |
+
original_lat_col = 'latitude'
|
622 |
+
original_lon_col = 'longitude'
|
623 |
+
except Exception as e:
|
624 |
+
st.error(f"Error parsing KML file: {str(e)}")
|
625 |
+
if not locations_df.empty and 'latitude' in locations_df.columns and 'longitude' in locations_df.columns:
|
626 |
+
m = leafmap.Map(center=[locations_df['latitude'].mean(), locations_df['longitude'].mean()], zoom=10)
|
627 |
+
for _, row in locations_df.iterrows():
|
628 |
+
latitude = row['latitude']
|
629 |
+
longitude = row['longitude']
|
630 |
+
if pd.isna(latitude) or pd.isna(longitude):
|
631 |
+
continue
|
632 |
+
m.add_marker(location=[latitude, longitude], popup=row.get('name', 'No Name'))
|
633 |
+
st.write("Map of Uploaded Points:")
|
634 |
+
m.to_streamlit()
|
635 |
+
elif shape_type.lower() == "polygon":
|
636 |
+
if file_upload.name.endswith('.csv'):
|
637 |
+
st.error("CSV upload not supported for polygons. Please upload a GeoJSON or KML file.")
|
638 |
+
elif file_upload.name.endswith('.geojson'):
|
639 |
+
locations_df = gpd.read_file(file_upload)
|
640 |
+
if 'geometry' not in locations_df.columns:
|
641 |
+
st.error("GeoJSON file doesn't contain geometry column")
|
642 |
+
st.stop()
|
643 |
+
elif file_upload.name.endswith('.kml'):
|
644 |
+
kml_string = file_upload.read().decode('utf-8')
|
645 |
+
try:
|
646 |
+
root = XET.fromstring(kml_string)
|
647 |
+
ns = {'kml': 'http://www.opengis.net/kml/2.2'}
|
648 |
+
polygons = []
|
649 |
+
for placemark in root.findall('.//kml:Placemark', ns):
|
650 |
+
name = placemark.findtext('kml:name', default=f"Polygon_{len(polygons)}", namespaces=ns)
|
651 |
+
coords_elem = placemark.find('.//kml:Polygon//kml:coordinates', ns)
|
652 |
+
if coords_elem is not None:
|
653 |
+
coords_text = ' '.join(coords_elem.text.split())
|
654 |
+
coord_pairs = [pair.split(',')[:2] for pair in coords_text.split() if pair]
|
655 |
+
if len(coord_pairs) >= 4:
|
656 |
+
coords_str = " ".join([f"{float(lon)} {float(lat)}" for lon, lat in coord_pairs])
|
657 |
+
polygons.append({'name': name, 'geometry': f"POLYGON (({coords_str}))"})
|
658 |
+
if not polygons:
|
659 |
+
st.error("No valid Polygon data found in the KML file.")
|
660 |
+
else:
|
661 |
+
locations_df = gpd.GeoDataFrame(polygons, geometry=gpd.GeoSeries.from_wkt([p['geometry'] for p in polygons]), crs="EPSG:4326")
|
662 |
+
except Exception as e:
|
663 |
+
st.error(f"Error parsing KML file: {str(e)}")
|
664 |
+
if not locations_df.empty and 'geometry' in locations_df.columns:
|
665 |
+
centroid_lat = locations_df.geometry.centroid.y.mean()
|
666 |
+
centroid_lon = locations_df.geometry.centroid.x.mean()
|
667 |
+
m = leafmap.Map(center=[centroid_lat, centroid_lon], zoom=10)
|
668 |
+
for _, row in locations_df.iterrows():
|
669 |
+
polygon = row['geometry']
|
670 |
+
if polygon.is_valid:
|
671 |
+
gdf = gpd.GeoDataFrame([row], geometry=[polygon], crs=locations_df.crs)
|
672 |
+
m.add_gdf(gdf=gdf, layer_name=row.get('name', 'Unnamed Polygon'))
|
673 |
+
st.write("Map of Uploaded Polygons:")
|
674 |
+
m.to_streamlit()
|
675 |
+
|
676 |
+
if st.button(f"Calculate {custom_formula}"):
|
677 |
+
if not locations_df.empty:
|
678 |
+
with st.spinner("Processing Data..."):
|
679 |
+
try:
|
680 |
+
results, processing_time = process_aggregation(
|
681 |
+
locations_df,
|
682 |
+
start_date_str,
|
683 |
+
end_date_str,
|
684 |
+
dataset_id,
|
685 |
+
selected_bands,
|
686 |
+
reducer_choice,
|
687 |
+
shape_type,
|
688 |
+
aggregation_period,
|
689 |
+
original_lat_col,
|
690 |
+
original_lon_col,
|
691 |
+
custom_formula,
|
692 |
+
kernel_size,
|
693 |
+
include_boundary,
|
694 |
+
tile_cloud_threshold=tile_cloud_threshold if "tile_cloud_threshold" in locals() else 0,
|
695 |
+
pixel_cloud_threshold=pixel_cloud_threshold if "pixel_cloud_threshold" in locals() else 0,
|
696 |
+
user_scale=user_scale
|
697 |
+
)
|
698 |
+
if results:
|
699 |
+
result_df = pd.DataFrame(results)
|
700 |
+
st.write(f"Processed Results Table ({aggregation_period}) for Formula: {custom_formula}")
|
701 |
+
st.dataframe(result_df)
|
702 |
+
filename = f"{main_selection}_{dataset_id}_{start_date.strftime('%Y%m%d')}_{end_date.strftime('%Y%m%d')}_{aggregation_period.lower()}.csv"
|
703 |
+
st.download_button(
|
704 |
+
label="Download results as CSV",
|
705 |
+
data=result_df.to_csv(index=False).encode('utf-8'),
|
706 |
+
file_name=filename,
|
707 |
+
mime='text/csv'
|
708 |
+
)
|
709 |
+
st.success(f"Processing complete! Total processing time: {processing_time:.2f} seconds.")
|
710 |
+
st.markdown("<h5>Graph Visualization</h5>", unsafe_allow_html=True)
|
711 |
+
if aggregation_period.lower() == 'custom (start date to end date)':
|
712 |
+
x_column = 'Date Range'
|
713 |
+
elif 'Date' in result_df.columns:
|
714 |
+
x_column = 'Date'
|
715 |
+
elif 'Week' in result_df.columns:
|
716 |
+
x_column = 'Week'
|
717 |
+
elif 'Month' in result_df.columns:
|
718 |
+
x_column = 'Month'
|
719 |
+
elif 'Year' in result_df.columns:
|
720 |
+
x_column = 'Year'
|
721 |
+
else:
|
722 |
+
st.warning("No valid time column found for plotting.")
|
723 |
+
st.stop()
|
724 |
+
y_column = 'Calculated Value'
|
725 |
+
fig = px.line(
|
726 |
+
result_df,
|
727 |
+
x=x_column,
|
728 |
+
y=y_column,
|
729 |
+
color='Location Name',
|
730 |
+
title=f"{custom_formula} Over Time"
|
731 |
+
)
|
732 |
+
st.plotly_chart(fig)
|
733 |
+
else:
|
734 |
+
st.warning("No results were generated. Check your inputs or formula.")
|
735 |
+
st.info(f"Total processing time: {processing_time:.2f} seconds.")
|
736 |
+
except Exception as e:
|
737 |
+
st.error(f"An error occurred during processing: {str(e)}")
|
738 |
+
else:
|
739 |
+
st.warning("Please upload a valid file to proceed.")
|
landsat_datasets.json
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Landsat 8 OLI/TIRS: Operational Land Imager and Thermal Infrared Sensor": {
|
3 |
+
"sub_options": {
|
4 |
+
"LANDSAT/LC08/C02/T1_L2": "Landsat 8 OLI/TIRS (Level-2, Surface Reflectance)",
|
5 |
+
"LANDSAT/LC08/C02/T1_TOA": "Landsat 8 OLI/TIRS (Top of Atmosphere Reflectance)"
|
6 |
+
},
|
7 |
+
"bands": {
|
8 |
+
"LANDSAT/LC08/C02/T1_L2": [
|
9 |
+
"SR_B1", "SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B6", "SR_B7",
|
10 |
+
"ST_B10", "QA_PIXEL", "QA_RADSAT"
|
11 |
+
],
|
12 |
+
"LANDSAT/LC08/C02/T1_TOA": [
|
13 |
+
"B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11",
|
14 |
+
"QA_PIXEL", "QA_RADSAT"
|
15 |
+
]
|
16 |
+
}
|
17 |
+
},
|
18 |
+
"Landsat 7 ETM+: Enhanced Thematic Mapper Plus": {
|
19 |
+
"sub_options": {
|
20 |
+
"LANDSAT/LE07/C02/T1_L2": "Landsat 7 ETM+ (Level-2, Surface Reflectance)",
|
21 |
+
"LANDSAT/LE07/C02/T1_TOA": "Landsat 7 ETM+ (Top of Atmosphere Reflectance)"
|
22 |
+
},
|
23 |
+
"bands": {
|
24 |
+
"LANDSAT/LE07/C02/T1_L2": [
|
25 |
+
"SR_B1", "SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B7",
|
26 |
+
"ST_B6", "QA_PIXEL", "QA_RADSAT"
|
27 |
+
],
|
28 |
+
"LANDSAT/LE07/C02/T1_TOA": [
|
29 |
+
"B1", "B2", "B3", "B4", "B5", "B6_VCID_1", "B6_VCID_2", "B7", "B8",
|
30 |
+
"QA_PIXEL", "QA_RADSAT"
|
31 |
+
]
|
32 |
+
}
|
33 |
+
},
|
34 |
+
"Landsat 5 TM: Thematic Mapper": {
|
35 |
+
"sub_options": {
|
36 |
+
"LANDSAT/LT05/C02/T1_L2": "Landsat 5 TM (Level-2, Surface Reflectance)",
|
37 |
+
"LANDSAT/LT05/C02/T1_TOA": "Landsat 5 TM (Top of Atmosphere Reflectance)"
|
38 |
+
},
|
39 |
+
"bands": {
|
40 |
+
"LANDSAT/LT05/C02/T1_L2": [
|
41 |
+
"SR_B1", "SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B7",
|
42 |
+
"ST_B6", "QA_PIXEL", "QA_RADSAT"
|
43 |
+
],
|
44 |
+
"LANDSAT/LT05/C02/T1_TOA": [
|
45 |
+
"B1", "B2", "B3", "B4", "B5", "B6", "B7",
|
46 |
+
"QA_PIXEL", "QA_RADSAT"
|
47 |
+
]
|
48 |
+
}
|
49 |
+
},
|
50 |
+
"Landsat 9 OLI-2/TIRS-2: Operational Land Imager-2 and Thermal Infrared Sensor-2": {
|
51 |
+
"sub_options": {
|
52 |
+
"LANDSAT/LC09/C02/T1_L2": "Landsat 9 OLI-2/TIRS-2 (Level-2, Surface Reflectance)",
|
53 |
+
"LANDSAT/LC09/C02/T1_TOA": "Landsat 9 OLI-2/TIRS-2 (Top of Atmosphere Reflectance)"
|
54 |
+
},
|
55 |
+
"bands": {
|
56 |
+
"LANDSAT/LC09/C02/T1_L2": [
|
57 |
+
"SR_B1", "SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B6", "SR_B7",
|
58 |
+
"ST_B10", "QA_PIXEL", "QA_RADSAT"
|
59 |
+
],
|
60 |
+
"LANDSAT/LC09/C02/T1_TOA": [
|
61 |
+
"B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11",
|
62 |
+
"QA_PIXEL", "QA_RADSAT"
|
63 |
+
]
|
64 |
+
}
|
65 |
+
},
|
66 |
+
"Landsat 4 TM: Thematic Mapper": {
|
67 |
+
"sub_options": {
|
68 |
+
"LANDSAT/LT04/C02/T1_L2": "Landsat 4 TM (Level-2, Surface Reflectance)",
|
69 |
+
"LANDSAT/LT04/C02/T1_TOA": "Landsat 4 TM (Top of Atmosphere Reflectance)"
|
70 |
+
},
|
71 |
+
"bands": {
|
72 |
+
"LANDSAT/LT04/C02/T1_L2": [
|
73 |
+
"SR_B1", "SR_B2", "SR_B3", "SR_B4", "SR_B5", "SR_B7",
|
74 |
+
"ST_B6", "QA_PIXEL", "QA_RADSAT"
|
75 |
+
],
|
76 |
+
"LANDSAT/LT04/C02/T1_TOA": [
|
77 |
+
"B1", "B2", "B3", "B4", "B5", "B6", "B7",
|
78 |
+
"QA_PIXEL", "QA_RADSAT"
|
79 |
+
]
|
80 |
+
}
|
81 |
+
},
|
82 |
+
"Landsat 1-5 MSS: Multispectral Scanner": {
|
83 |
+
"sub_options": {
|
84 |
+
"LANDSAT/LM01/C02/T1": "Landsat 1 MSS (Level-1)",
|
85 |
+
"LANDSAT/LM02/C02/T1": "Landsat 2 MSS (Level-1)",
|
86 |
+
"LANDSAT/LM03/C02/T1": "Landsat 3 MSS (Level-1)",
|
87 |
+
"LANDSAT/LM04/C02/T1": "Landsat 4 MSS (Level-1)",
|
88 |
+
"LANDSAT/LM05/C02/T1": "Landsat 5 MSS (Level-1)"
|
89 |
+
},
|
90 |
+
"bands": {
|
91 |
+
"LANDSAT/LM01/C02/T1": [
|
92 |
+
"B4", "B5", "B6", "B7",
|
93 |
+
"QA_PIXEL", "QA_RADSAT"
|
94 |
+
],
|
95 |
+
"LANDSAT/LM02/C02/T1": [
|
96 |
+
"B4", "B5", "B6", "B7",
|
97 |
+
"QA_PIXEL", "QA_RADSAT"
|
98 |
+
],
|
99 |
+
"LANDSAT/LM03/C02/T1": [
|
100 |
+
"B4", "B5", "B6", "B7",
|
101 |
+
"QA_PIXEL", "QA_RADSAT"
|
102 |
+
],
|
103 |
+
"LANDSAT/LM04/C02/T1": [
|
104 |
+
"B4", "B5", "B6", "B7",
|
105 |
+
"QA_PIXEL", "QA_RADSAT"
|
106 |
+
],
|
107 |
+
"LANDSAT/LM05/C02/T1": [
|
108 |
+
"B4", "B5", "B6", "B7",
|
109 |
+
"QA_PIXEL", "QA_RADSAT"
|
110 |
+
]
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
logo-color.png
ADDED
![]() |
modis_datasets.json
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"MODIS Terra Surface Reflectance": {
|
3 |
+
"sub_options": {
|
4 |
+
"MODIS/061/MOD09GA": "MODIS Terra Surface Reflectance Daily Global 500m",
|
5 |
+
"MODIS/061/MOD09A1": "MODIS Terra Surface Reflectance 8-Day Global 500m"
|
6 |
+
},
|
7 |
+
"bands": {
|
8 |
+
"MODIS/061/MOD09GA": [
|
9 |
+
"sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b04",
|
10 |
+
"sur_refl_b05", "sur_refl_b06", "sur_refl_b07",
|
11 |
+
"QC_500m", "State_500m"
|
12 |
+
],
|
13 |
+
"MODIS/061/MOD09A1": [
|
14 |
+
"sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b04",
|
15 |
+
"sur_refl_b05", "sur_refl_b06", "sur_refl_b07",
|
16 |
+
"QC_500m", "State_500m"
|
17 |
+
]
|
18 |
+
}
|
19 |
+
},
|
20 |
+
"MODIS Aqua Surface Reflectance": {
|
21 |
+
"sub_options": {
|
22 |
+
"MODIS/061/MYD09GA": "MODIS Aqua Surface Reflectance Daily Global 500m",
|
23 |
+
"MODIS/061/MYD09A1": "MODIS Aqua Surface Reflectance 8-Day Global 500m"
|
24 |
+
},
|
25 |
+
"bands": {
|
26 |
+
"MODIS/061/MYD09GA": [
|
27 |
+
"sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b04",
|
28 |
+
"sur_refl_b05", "sur_refl_b06", "sur_refl_b07",
|
29 |
+
"QC_500m", "State_500m"
|
30 |
+
],
|
31 |
+
"MODIS/061/MYD09A1": [
|
32 |
+
"sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b04",
|
33 |
+
"sur_refl_b05", "sur_refl_b06", "sur_refl_b07",
|
34 |
+
"QC_500m", "State_500m"
|
35 |
+
]
|
36 |
+
}
|
37 |
+
},
|
38 |
+
"MODIS Terra Vegetation Indices": {
|
39 |
+
"sub_options": {
|
40 |
+
"MODIS/061/MOD13A1": "MODIS Terra Vegetation Indices 16-Day Global 500m",
|
41 |
+
"MODIS/061/MOD13Q1": "MODIS Terra Vegetation Indices 16-Day Global 250m"
|
42 |
+
},
|
43 |
+
"bands": {
|
44 |
+
"MODIS/061/MOD13A1": [
|
45 |
+
"NDVI", "EVI", "DetailedQA",
|
46 |
+
"sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b07"
|
47 |
+
],
|
48 |
+
"MODIS/061/MOD13Q1": [
|
49 |
+
"NDVI", "EVI", "DetailedQA",
|
50 |
+
"sur_refl_b01", "sur_refl_b02"
|
51 |
+
]
|
52 |
+
}
|
53 |
+
},
|
54 |
+
"MODIS Terra Land Surface Temperature": {
|
55 |
+
"sub_options": {
|
56 |
+
"MODIS/061/MOD11A1": "MODIS Terra Land Surface Temperature Daily Global 1km",
|
57 |
+
"MODIS/061/MOD11A2": "MODIS Terra Land Surface Temperature 8-Day Global 1km"
|
58 |
+
},
|
59 |
+
"bands": {
|
60 |
+
"MODIS/061/MOD11A1": [
|
61 |
+
"LST_Day_1km", "LST_Night_1km", "QC_Day", "QC_Night"
|
62 |
+
],
|
63 |
+
"MODIS/061/MOD11A2": [
|
64 |
+
"LST_Day_1km", "LST_Night_1km", "QC_Day", "QC_Night"
|
65 |
+
]
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
requirements.txt
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
ee
|
3 |
+
geemap
|
4 |
+
panda
|
5 |
+
geopandas
|
6 |
+
leafmap
|
7 |
+
fastkml
|
8 |
+
lxml
|
sentinel_datasets.json
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Sentinel-1 SAR GRD: C-band Synthetic Aperture Radar": {
|
3 |
+
"sub_options": {
|
4 |
+
"COPERNICUS/S1_GRD": "Sentinel-1 SAR GRD: C-band Synthetic Aperture Radar"
|
5 |
+
},
|
6 |
+
"bands": {
|
7 |
+
"COPERNICUS/S1_GRD": ["VV", "VH", "HH", "HV"]
|
8 |
+
}
|
9 |
+
},
|
10 |
+
"Sentinel-2 MSI: Multispectral Instrument": {
|
11 |
+
"sub_options": {
|
12 |
+
"COPERNICUS/S2": "Sentinel-2 MSI: Multispectral Instrument (Level-1C)",
|
13 |
+
"COPERNICUS/S2_SR": "Sentinel-2 MSI: Multispectral Instrument (Level-2A)"
|
14 |
+
},
|
15 |
+
"bands": {
|
16 |
+
"COPERNICUS/S2": ["B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B8A", "B9", "B10", "B11", "B12"],
|
17 |
+
"COPERNICUS/S2_SR": ["B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B8A", "B9", "B11", "B12", "AOT", "WVP"]
|
18 |
+
}
|
19 |
+
},
|
20 |
+
"Sentinel-3 OLCI : Ocean and Land Color Instrument": {
|
21 |
+
"sub_options": {
|
22 |
+
"COPERNICUS/S3/OLCI": "Sentinel-3 OLCI : Ocean and Land Color Instrument"
|
23 |
+
},
|
24 |
+
"bands": {
|
25 |
+
"COPERNICUS/S3/OLCI": [
|
26 |
+
"Oa01_radiance", "Oa02_radiance", "Oa03_radiance", "Oa04_radiance", "Oa05_radiance",
|
27 |
+
"Oa06_radiance", "Oa07_radiance", "Oa08_radiance", "Oa09_radiance", "Oa10_radiance",
|
28 |
+
"Oa11_radiance", "Oa12_radiance", "Oa13_radiance", "Oa14_radiance", "Oa15_radiance",
|
29 |
+
"Oa16_radiance", "Oa17_radiance", "Oa18_radiance", "Oa19_radiance", "Oa20_radiance",
|
30 |
+
"Oa21_radiance"
|
31 |
+
]
|
32 |
+
}
|
33 |
+
},
|
34 |
+
"Sentinel-5P TROPOMI: TROPOspheric Monitoring Instrument": {
|
35 |
+
"sub_options": {
|
36 |
+
"COPERNICUS/S5P/NRTI/L3_NO2": "Sentinel-5P TROPOMI: TROPOspheric Monitoring Instrument (NO2)",
|
37 |
+
"COPERNICUS/S5P/OFFL/L3_O3": "Sentinel-5P TROPOMI: TROPOspheric Monitoring Instrument (O3)"
|
38 |
+
},
|
39 |
+
"bands": {
|
40 |
+
"COPERNICUS/S5P/NRTI/L3_NO2": [
|
41 |
+
"NO2_column_number_density", "tropospheric_NO2_column_number_density",
|
42 |
+
"stratospheric_NO2_column_number_density", "NO2_slant_column_number_density"
|
43 |
+
],
|
44 |
+
"COPERNICUS/S5P/OFFL/L3_O3": [
|
45 |
+
"O3_column_number_density", "O3_effective_temperature"
|
46 |
+
]
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
viirs_datasets.json
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"VIIRS Day/Night Band Composites": {
|
3 |
+
"sub_options": {
|
4 |
+
"NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG": "VIIRS Day/Night Band Composite (Monthly V1)"
|
5 |
+
},
|
6 |
+
"bands": {
|
7 |
+
"NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG": [
|
8 |
+
"avg_rad", "cf_cvg", "cvg"
|
9 |
+
]
|
10 |
+
}
|
11 |
+
},
|
12 |
+
"VIIRS Surface Reflectance": {
|
13 |
+
"sub_options": {
|
14 |
+
"NOAA/VIIRS/001/VNP09GA": "VIIRS/NPP Surface Reflectance 6-Min L2G Global 1km and 500m SIN Grid V001",
|
15 |
+
"NOAA/VIIRS/001/VJ109GA": "VIIRS/JPSS1 Surface Reflectance 6-Min L2G Global 1km and 500m SIN Grid V001"
|
16 |
+
},
|
17 |
+
"bands": {
|
18 |
+
"NOAA/VIIRS/001/VNP09GA": [
|
19 |
+
"M1", "M2", "M3", "M4", "M5", "M7", "M8", "M10", "M11",
|
20 |
+
"I1", "I2", "I3"
|
21 |
+
],
|
22 |
+
"NOAA/VIIRS/001/VJ109GA": [
|
23 |
+
"M1", "M2", "M3", "M4", "M5", "M7", "M8", "M10", "M11",
|
24 |
+
"I1", "I2", "I3"
|
25 |
+
]
|
26 |
+
}
|
27 |
+
},
|
28 |
+
"VIIRS Vegetation Indices": {
|
29 |
+
"sub_options": {
|
30 |
+
"NOAA/VIIRS/001/VNP13A1": "VIIRS/NPP Vegetation Indices 16-Day L3 Global 500m SIN Grid V001",
|
31 |
+
"NOAA/VIIRS/001/VJ113A1": "VIIRS/JPSS1 Vegetation Indices 16-Day L3 Global 500m SIN Grid V001"
|
32 |
+
},
|
33 |
+
"bands": {
|
34 |
+
"NOAA/VIIRS/001/VNP13A1": [
|
35 |
+
"NDVI", "EVI", "red", "nir", "blue", "MIR", "pixel_reliability",
|
36 |
+
"relative_azimuth_angle", "sun_zenith_angle", "satellite_zenith_angle"
|
37 |
+
],
|
38 |
+
"NOAA/VIIRS/001/VJ113A1": [
|
39 |
+
"NDVI", "EVI", "red", "nir", "blue", "MIR", "pixel_reliability",
|
40 |
+
"relative_azimuth_angle", "sun_zenith_angle", "satellite_zenith_angle"
|
41 |
+
]
|
42 |
+
}
|
43 |
+
},
|
44 |
+
"VIIRS Active Fire Detection": {
|
45 |
+
"sub_options": {
|
46 |
+
"NOAA/VIIRS/001/VNP14IMG": "VIIRS/NPP Thermal Anomalies/Fire 6-Min L2 Swath 375m V001",
|
47 |
+
"NOAA/VIIRS/001/VJ114IMG": "VIIRS/JPSS1 Thermal Anomalies/Fire 6-Min L2 Swath 375m V001"
|
48 |
+
},
|
49 |
+
"bands": {
|
50 |
+
"NOAA/VIIRS/001/VNP14IMG": [
|
51 |
+
"FireMask", "temperature", "confidence",
|
52 |
+
"brightness_temperature_3_7um", "brightness_temperature_11um"
|
53 |
+
],
|
54 |
+
"NOAA/VIIRS/001/VJ114IMG": [
|
55 |
+
"FireMask", "temperature", "confidence",
|
56 |
+
"brightness_temperature_3_7um", "brightness_temperature_11um"
|
57 |
+
]
|
58 |
+
}
|
59 |
+
},
|
60 |
+
"VIIRS Snow Cover": {
|
61 |
+
"sub_options": {
|
62 |
+
"NOAA/VIIRS/001/VNP10A1": "VIIRS/NPP Snow Cover 8-Day L3 Global 500m SIN Grid V001",
|
63 |
+
"NOAA/VIIRS/001/VJ110A1": "VIIRS/JPSS1 Snow Cover 8-Day L3 Global 500m SIN Grid V001"
|
64 |
+
},
|
65 |
+
"bands": {
|
66 |
+
"NOAA/VIIRS/001/VNP10A1": [
|
67 |
+
"NDSI_Snow_Cover", "Snow_Albedo_Daily_Tile",
|
68 |
+
"Snow_Albedo_Num_Obs_Daily_Tile", "Fractional_Snow_Cover",
|
69 |
+
"Snow_Albedo_Quality_Flag"
|
70 |
+
],
|
71 |
+
"NOAA/VIIRS/001/VJ110A1": [
|
72 |
+
"NDSI_Snow_Cover", "Snow_Albedo_Daily_Tile",
|
73 |
+
"Snow_Albedo_Num_Obs_Daily_Tile", "Fractional_Snow_Cover",
|
74 |
+
"Snow_Albedo_Quality_Flag"
|
75 |
+
]
|
76 |
+
}
|
77 |
+
},
|
78 |
+
"VIIRS Ocean Color/Chlorophyll": {
|
79 |
+
"sub_options": {
|
80 |
+
"NOAA/VIIRS/001/VNP09LOA": "VIIRS/NPP Ocean Color/Chlorophyll 8-Day L3 Global 4km SIN Grid V001"
|
81 |
+
},
|
82 |
+
"bands": {
|
83 |
+
"NOAA/VIIRS/001/VNP09LOA": [
|
84 |
+
"chlor_a", "chl_ocx", "Kd_490", "pic", "poc", "ipar", "nflh",
|
85 |
+
"par", "Rrs_412", "Rrs_443", "Rrs_488", "Rrs_555", "Rrs_678",
|
86 |
+
"Rrs_748", "Rrs_869"
|
87 |
+
]
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|