YashMK89 commited on
Commit
626c6f1
·
verified ·
1 Parent(s): 284e7aa

upload 14 file

Browse files
.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

  • SHA256: 34c66193b08215e1f10d00a857fc31c0c9c17f08829b40383e81a33129194c0e
  • Pointer size: 131 Bytes
  • Size of remote file: 191 kB
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
+ }